设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12189|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:/ N) i9 O- ^( f4 f
Name = (WCHAR *) L"Poke";
) w3 W8 ^# A* ?* E+ i  r# u5 @                 : j7 l. p. D) E6 v0 `9 e0 q2 S
        hr = m_pDisp->GetIDsOfNames (
* k+ O7 O0 b; R% f                IID_NULL,                                // reserved
3 H4 L/ `; N" J( M& J6 h8 ~: ?6 Z2 v                &Name,                                        // Array of names to get IDs for1 T+ R: ^* I' }
                1,                                        // # of names in the array
. F( ~0 f1 Q4 }                LOCALE_SYSTEM_DEFAULT,        // System locale
* W9 T! l3 I* N! p. ~' H                &pokeID);                                // Array of IDs to fill on output
# r- Y5 I$ q9 J, t/ Y                       
) j; C& y% M/ m( D  b) o* g  R# h        if (hr)
! h7 U7 q2 Y/ Q6 W! h9 i. ~                {* B; [% i) e3 n% F5 v" D3 H% d$ L
                MessageBox ("Get Poke Unsuccessful");
0 M) ]+ m' _0 ^* ?" X  B" i' M                return;& g7 {5 W9 E( |6 P& L- X
                }# k+ G  o6 M1 u* `; j' w

2 R( J5 S+ K3 ?, i7 d0 C! I/**************************传递数据给extend**************************************/
4 A8 e2 W3 C, [: W  S: k" t        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
1 r& J4 @4 ^2 o9 m       
7 F1 ^' V6 T) D, w         valueStr                                 = SysAllocString((WCHAR *) L"1232");0 J4 w9 y) {2 Y* U
        VariantInit(&pokeVariant[0]);
/ ]$ v" d3 b$ [1 P% }        pokeVariant[0].vt                 = VT_BSTR;" |7 |+ ?% d3 Z  M( g: \& f  H& ~; E5 z
        pokeVariant[0].bstrVal         = valueStr;
) t2 R) v' c8 M5 H  u* c3 t. J* r3 L: Q7 e; ?2 c' {4 f7 h
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");. Z9 Q) h0 ]& |) ]$ I
        VariantInit(&pokeVariant[1]);
  Q, [& u2 b/ {' N; @% i3 r        pokeVariant[1].vt                 = VT_BSTR;
9 T" m1 B! L$ F" d2 Q. `        pokeVariant[1].bstrVal         = itemStr;, N: _2 w* k! [4 {
: z7 }( g  B% _0 y
          topicStr                                 = SysAllocString((WCHAR *) L"system");% x& n; g7 e3 b. Z
        VariantInit(&pokeVariant[2]);
, I/ z! ~  N' R        pokeVariant[2].vt                 = VT_BSTR;& l; |+ M, ^' y0 l- f: }
        pokeVariant[2].bstrVal         = topicStr;
& z! V$ J  h: B/ r* ?& K$ _
8 ~3 q# D  C$ i! [: {! ~0 _//        Set the DISPPARAMS structure that holds the variant.
2 h1 I9 [1 B0 R4 q9 h  m, J, f
8 a0 N; u. z9 F0 {6 j$ K        dp.rgvarg                                         = pokeVariant;/ d3 z' J! f. b) g
        dp.cArgs                                         = 3;
6 L9 N9 _0 @$ d        dp.rgdispidNamedArgs                 = NULL;& y1 i/ j6 V$ K( q7 I/ T& w
        dp.cNamedArgs                                 = 0;1 Y3 C( {8 ~" r9 R( M8 W" l
, D0 W( z0 D4 i* z7 I: o
//        Call IDispatch::Invoke()! u! ~7 D3 _/ y" u0 k  v
+ a8 F* F: S, m1 \4 |2 y
        hr = m_pDisp->Invoke(
5 Y4 Z3 G9 c. P5 p                pokeID,8 M4 r0 K( R; @1 x' F3 ]
                IID_NULL,- S# T) {3 t' l9 V5 Z+ x+ \1 ^
                LOCALE_SYSTEM_DEFAULT,
6 G' X8 J7 e3 ]1 r. ]                DISPATCH_METHOD,
+ C" \9 U* Y/ X) [5 U, ?7 k: v                &dp,
6 o* |5 T+ F& |3 G/ k                NULL,5 O% h( m( M( c- @
                &ei,
. o; _8 Q, g4 a* o+ T/ z7 X! W                &uiErr);0 _9 W5 D8 _. j) ]% j! }
2 e5 d' D  H# ?: K
        SysFreeString(topicStr);( ^/ ~; q, i/ ]$ w+ h# n) o8 v
        SysFreeString(itemStr);4 {4 ^' ~6 o7 B9 H$ f
        SysFreeString(valueStr);: }" F2 f! H- j. L

$ A2 Q& w$ X$ Y4 `9 V$ _& z现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???% V" d# t2 \# V/ o' ]/ H. @
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
( F- }: ~# y8 Z1 L4 F. _) ]# p' ~: ^. L8 T, I

  ]8 \3 `! A* m! E. E  ^3 H( D2.这是request的程序
5 a- i4 t( v/ h$ z4 I# V0 u//  Request a value from Extend6 f) Y6 G; X! N1 C+ v9 I9 x7 i
//
  l, a( P/ K% z* |+ d/ S//        Initialize the variant that will hold the BSTR.  Set the variant's& q& S! o8 x% J6 ^) q
//        type flag to indicate the fact that this variant holds a BSTR. Place the+ d4 t# o1 R  k8 t
//        BSTR into the variant structure.  B7 N/ N6 V; z' j: ]. v  m

$ q% R) S: F2 U: K( n        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);6 A7 E1 W3 _% d8 K/ z$ t
       
8 Y! C3 f. [0 \2 f% I8 G         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
- E5 k! N1 {2 J7 K! ~        VariantInit(&requestVariant[0]);
3 y/ X8 w( q$ y2 U4 e* E        requestVariant[0].vt                 = VT_BSTR;; {* n& C' z* Y" e+ n( N4 i4 a3 S
        requestVariant[0].bstrVal         = itemStr;, Q# Z" e* F3 _( l9 g6 E/ f

: s0 g/ ]0 N. b" A          topicStr                                         = SysAllocString((WCHAR *) L"system");
8 R. o6 v" a' [        VariantInit(&requestVariant[1]); 4 ?* j- D  M# m1 s
        requestVariant[1].vt                 = VT_BSTR;; V9 \" n5 `- S
        requestVariant[1].bstrVal         = topicStr;
) \# D) ^. s: Y
6 P/ H0 b6 z3 F2 I//        Set the DISPPARAMS structure that holds the variant.& d- g* T8 }  S7 U% e

) i3 S" {3 S: a1 z* Z7 z/ f2 ]- M        dp2.rgvarg                                         = requestVariant;
3 @3 S/ q' v4 ~8 ]; ?2 d& S* W        dp2.cArgs                                         = 2;0 x/ `5 W7 D* N2 ]. f
        dp2.rgdispidNamedArgs                 = NULL;
- e: j3 K3 x; y+ r4 r+ ^        dp2.cNamedArgs                                 = 0;! @0 _/ O9 Y4 a

$ }5 l6 c. r" h# x5 A4 h         var.vt = VT_EMPTY;
1 ~$ D- ^0 W% `6 B% u& d* n8 g0 X0 e* w6 q
//        Call IDispatch::Invoke()( V. s3 M  y! `! @& k+ L
+ B8 ^0 O' s  ?% |( Z
        hr = m_pDisp->Invoke(4 z, R% o6 K8 w8 v
                requestID,- [8 D/ P3 b: Q/ i8 I
                IID_NULL,$ \' Y1 X; h; d4 S, R
                LOCALE_SYSTEM_DEFAULT,
4 A$ B* P  b  q. S- I6 j                DISPATCH_METHOD,. Z6 K: ]/ G0 r) }9 i3 e) p8 P* g/ b
                &dp2,# i& Q0 f& _3 `
                &var,6 ~* }: D. a+ R8 _8 |
                &ei,) x; O& n1 O- @% g1 |
                &uiErr);7 g% c0 \( c. u5 ^
# G6 d" g( b4 c7 C* C
        SysFreeString(topicStr);
7 ~* e) c- ^9 f' K8 ?# D        SysFreeString(itemStr);
% a8 {, M4 D0 J9 v# O9 F请问该程序是获得extend里面的哪个值?, J  m) ?8 N+ {& b; W
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-8-2 02:24 , Processed in 0.018414 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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