设为首页收藏本站

最大的系统仿真与系统优化公益交流社区

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7995|回复: 0

[求助] c++和extend的COM接口问题

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:- V8 B/ J2 n+ @0 J
Name = (WCHAR *) L"Poke";) N  F/ q  Q8 v' F& s: ?
                 0 U5 W6 ^! E& h8 o. p" @5 j
        hr = m_pDisp->GetIDsOfNames (: Y. C/ r' m: ~. W' f; F. Q
                IID_NULL,                                // reserved- i0 }8 d5 X3 i* u& H
                &Name,                                        // Array of names to get IDs for
2 g- S0 Z; Q' O7 O* B                1,                                        // # of names in the array
4 M5 L. }  |5 U/ m1 S                LOCALE_SYSTEM_DEFAULT,        // System locale
1 r7 N  O0 ?  ^: Z                &pokeID);                                // Array of IDs to fill on output3 m5 Y7 z3 p& [4 \# {8 X! q% B
                        6 v( }" o# Y# D/ L" P+ }
        if (hr)2 R3 h- ?! j) S$ v0 Z5 W
                {
! x# C+ ?  W4 R2 T                MessageBox ("Get Poke Unsuccessful");/ C5 u- G* x; g" W7 W- l( h, e+ s9 [
                return;
8 l) i# ~, Y/ O% w  O; c                }5 c$ I5 w" Y: I) ~: i
: |& G4 y2 u+ G2 C' T- T; y0 n
/**************************传递数据给extend**************************************/
  d& a9 V1 g6 p/ z; W, Z6 U        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
. M0 o" c* q1 E; b6 P0 Q       
* k8 v% S& |, B9 d3 {) I2 W         valueStr                                 = SysAllocString((WCHAR *) L"1232");
2 {9 k2 S2 J# O$ u5 h        VariantInit(&pokeVariant[0]); 4 e: C7 `+ t3 d) r! H
        pokeVariant[0].vt                 = VT_BSTR;. A0 w0 D5 g% D' {
        pokeVariant[0].bstrVal         = valueStr;  E7 W+ R$ U# z+ ?/ J& P
$ g: {( {0 Z# \9 y" C' [/ n, v
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
( p; H% L! ~! I1 }0 n        VariantInit(&pokeVariant[1]); 3 D3 b* L2 l# G' y# \% i" Y
        pokeVariant[1].vt                 = VT_BSTR;
. `5 x; z' \: i/ D) }0 i8 W        pokeVariant[1].bstrVal         = itemStr;
7 S- n" W& a* m2 K5 \2 \- ?- M& y5 p! D7 I  J! C: a: M# U7 Y1 F
          topicStr                                 = SysAllocString((WCHAR *) L"system");
9 f3 E5 a% k% f        VariantInit(&pokeVariant[2]); ! |% V, e& @6 @
        pokeVariant[2].vt                 = VT_BSTR;
5 o& p& ]4 G; A7 @5 f' `0 ?        pokeVariant[2].bstrVal         = topicStr;3 A8 i7 X: R" o2 \4 I0 i$ \

- Y6 |! G/ m, k//        Set the DISPPARAMS structure that holds the variant.4 Y5 x9 [1 x3 \+ [7 d+ V$ f
! M5 ~* I3 u8 p  |: L
        dp.rgvarg                                         = pokeVariant;
* o& J5 l! t$ t: u, Q9 v& [4 k) ^        dp.cArgs                                         = 3;
5 ?! n$ i$ [8 l- b/ _        dp.rgdispidNamedArgs                 = NULL;
) J8 G5 Z! A6 N0 F. h        dp.cNamedArgs                                 = 0;3 u4 S8 ^9 d! v$ Y+ P3 N5 e& E

5 Z4 j- e+ M" @6 ]( U( \, N//        Call IDispatch::Invoke()
) q+ u/ K1 d+ {, {5 k) E! H1 O/ y. M! O/ y4 |
        hr = m_pDisp->Invoke(( q3 J% R# L" G5 M7 n
                pokeID,/ y, i" K. ]: ~( Z' @
                IID_NULL,  v) ~: m6 w5 X
                LOCALE_SYSTEM_DEFAULT,
4 ^3 j3 J2 r  R9 p, c0 D+ J1 U                DISPATCH_METHOD,
9 b) M2 O/ N4 Y' R% P                &dp,+ q4 k' u  F5 t5 g1 }
                NULL,
; `' Y% r) _& y4 ]                &ei,
$ G$ F- L6 j3 u- r  h" R; t; y' M- f                &uiErr);8 C/ ^, p) F! U( v% H; }! D+ g
% ?& y7 L) V/ u1 k" m0 j
        SysFreeString(topicStr);
0 A& b7 {4 \# |$ _        SysFreeString(itemStr);" M8 m4 o1 _8 S; P1 Q7 h, g
        SysFreeString(valueStr);- p# Y- m9 \. J. O
9 w: J3 S1 T; @# O7 L2 B4 O9 c
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???/ X; _3 I9 f) S* k
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????8 C4 R; u  i/ n4 C( P

  X. e' a% M: ^' V% M; l% X" H5 h# u5 `' v
2.这是request的程序
. _3 z2 F  l9 C5 t, C/ C//  Request a value from Extend9 l2 x8 k$ S' z& w" S; s
//. K" B, H; E# _6 G
//        Initialize the variant that will hold the BSTR.  Set the variant's, K* a9 M" ]! G. o
//        type flag to indicate the fact that this variant holds a BSTR. Place the0 ]/ L  m4 k& i
//        BSTR into the variant structure.1 J$ C& x( ?% `8 f0 N% |# Y2 A( _6 J7 m
5 C: W) A' O" n% X% j2 K6 X
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);! y) x" I2 z! h3 z" h7 d
       
& p! o# R7 Z: H3 \         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
4 ^, c* I) |8 b4 N1 n        VariantInit(&requestVariant[0]); $ T- w& p, W3 g/ J
        requestVariant[0].vt                 = VT_BSTR;* L9 P1 o9 }/ b- {6 f5 w  H
        requestVariant[0].bstrVal         = itemStr;
# V1 w$ U8 d4 g) J6 F7 Z1 P. v+ I/ g& ~& T6 S  w
          topicStr                                         = SysAllocString((WCHAR *) L"system");
  b( H/ Y* K& @3 l& ^        VariantInit(&requestVariant[1]); . T9 X: L' J5 r& R) i6 L
        requestVariant[1].vt                 = VT_BSTR;# U) y, L9 l+ T) o7 P) h
        requestVariant[1].bstrVal         = topicStr;
% ^# g) w( n4 N* H: ~! V9 z4 y" h
//        Set the DISPPARAMS structure that holds the variant.' m% m5 ?' u) W) c6 Q/ K

3 D$ \% K9 S# Q, ?* `. F& w        dp2.rgvarg                                         = requestVariant;" U& U5 n1 z" \: K4 x" ~
        dp2.cArgs                                         = 2;. i$ |8 R, a  U0 c/ Q, `5 H
        dp2.rgdispidNamedArgs                 = NULL;7 G) Q: T- n1 G/ d
        dp2.cNamedArgs                                 = 0;
6 d4 b- @* H8 I9 w. _+ C
1 g3 n( N; E: M! \- F- ]         var.vt = VT_EMPTY;1 O5 [( t, B" ]7 w1 q

8 c  @. }+ }( H# l4 k//        Call IDispatch::Invoke()2 t8 {; ~% A& _2 I
8 z4 P$ J4 R4 O" E
        hr = m_pDisp->Invoke(4 k( b( G0 V) M( u
                requestID,* E  N6 a' t6 n( d$ q
                IID_NULL,
. h+ I3 M$ I5 L2 m& n5 [                LOCALE_SYSTEM_DEFAULT,) \) I' ~/ _; s8 Q
                DISPATCH_METHOD,
1 x, E, ?& D& X5 t# }                &dp2,4 }- E. ^; u1 }" s. N
                &var,
/ v/ t  e1 |+ H" D/ K8 Y- h0 U                &ei,2 g2 ~& ]1 c" J: A0 L: P
                &uiErr);* y  Q4 E8 q; `- v2 v% a' E

. f% [) M, `8 g) N! f        SysFreeString(topicStr);
' a; U8 x- q" R% `        SysFreeString(itemStr);  G8 L) ]0 i2 r7 O: c9 U! S+ R5 I
请问该程序是获得extend里面的哪个值?) L; Q/ G* |" c- T2 n7 v
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|SimulWay 道于仿真   

GMT+8, 2026-2-10 10:19 , Processed in 0.018821 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表