设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11066|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
& z- f( T, m- r( W' g$ C* FName = (WCHAR *) L"Poke";
0 J  t  @- v) r9 B: r                
& d* i* ?/ ^  B8 s        hr = m_pDisp->GetIDsOfNames (: ^0 `* d$ p9 v, G% \9 Q) S" D
                IID_NULL,                                // reserved0 I) o3 d. A! M5 e3 U$ v- Y6 E
                &Name,                                        // Array of names to get IDs for  t8 H3 V4 r/ Q2 y, _) e
                1,                                        // # of names in the array* H0 m' ]  |" @8 `0 ^7 u3 l8 e4 v
                LOCALE_SYSTEM_DEFAULT,        // System locale
2 U$ n3 D0 v9 C% B  D# N6 K0 N9 V                &pokeID);                                // Array of IDs to fill on output8 M) J) f& A! W8 Z( f6 G
                        ( |' D7 \# u4 \5 F7 u
        if (hr)' b: Y+ ], m" i& x2 }6 Y, l
                {
% X& ?" k( d8 L& s+ E/ m3 I: [4 |3 ~                MessageBox ("Get Poke Unsuccessful");
, w- Y6 H) S4 M; _                return;9 ^3 \$ V2 h5 b: ~/ P- y" ?
                }5 \- E  ^1 q9 {% ~" |
+ X7 [5 }7 R6 `7 L
/**************************传递数据给extend**************************************/
& I7 _5 F' t6 n$ y        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);8 Q2 T2 D2 N; ^+ r
        - N! s" K3 O3 ?1 d! ~1 h) D% b) U
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
/ Z# J# e8 I( W2 K; g        VariantInit(&pokeVariant[0]);
" ]3 u1 c! L* d- u, R        pokeVariant[0].vt                 = VT_BSTR;5 _( F$ H2 i+ ^/ `* [% Y, y
        pokeVariant[0].bstrVal         = valueStr;0 m8 m6 J9 m+ T$ k

, {% M4 p7 t: D8 L6 u. ?. t3 k# d         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");7 l: H2 l( E* L& z
        VariantInit(&pokeVariant[1]);
1 L+ u  }# c5 i! @        pokeVariant[1].vt                 = VT_BSTR;
6 t4 y* s* w, e' e        pokeVariant[1].bstrVal         = itemStr;
$ f7 V0 Q+ s/ e% ]) l, ^2 d
& P! X' u; b. c8 Y          topicStr                                 = SysAllocString((WCHAR *) L"system");
0 V# P6 T0 y7 C' ]$ k5 u" Y        VariantInit(&pokeVariant[2]); 2 H: t  U+ t" _& w
        pokeVariant[2].vt                 = VT_BSTR;4 M$ `& ]& R( U8 ?5 Z4 L& u6 c! @
        pokeVariant[2].bstrVal         = topicStr;5 R9 a0 w3 @: g! Q( R" x2 B

5 T% A+ n/ W! q3 D% Z" x//        Set the DISPPARAMS structure that holds the variant.
2 {  e& y, O+ v% }9 |2 G" |1 N  `' J' T  b  k
        dp.rgvarg                                         = pokeVariant;* b9 U2 T& o& W, z+ \( @( h1 c0 H$ O
        dp.cArgs                                         = 3;
1 V6 D1 }8 f1 m& l+ ]$ X- Z        dp.rgdispidNamedArgs                 = NULL;
! J( K7 M" U2 F; K; x* l  m        dp.cNamedArgs                                 = 0;
: n( \/ y  U; e  u% c$ T( M
4 a. J: o1 {3 E( r//        Call IDispatch::Invoke()1 [5 O( ]7 H  Q/ N% d

, _6 L, a) O" Z9 A! y        hr = m_pDisp->Invoke(
5 G0 F6 P8 {" C4 j& A2 d                pokeID,& K- U" a: M! A
                IID_NULL,% c7 \( E, R/ p1 Z, K8 `/ J
                LOCALE_SYSTEM_DEFAULT,
+ W( S6 l' j, O2 i+ b+ x& R                DISPATCH_METHOD,
# k( |# X3 v" N* @                &dp,+ O, |& `3 j% {( z! a! u8 f! s- D
                NULL,
: C* p4 I. y, n                &ei,
# w( U& H. j+ K                &uiErr);0 ~" T, k9 \& t  I0 F

* c# C) M* t8 G% E        SysFreeString(topicStr);
6 h% Z9 P8 |7 ^3 b# d1 Q        SysFreeString(itemStr);- R  {9 ~; s1 ]# b  i2 e" X9 W
        SysFreeString(valueStr);
7 f4 H8 E- ]2 D& {
( A* q3 P4 j2 Y6 C6 I* A( e现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???7 k+ e* L9 n# S  i
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????+ ^; |8 }2 J  v( m: t

0 @, a. u9 v. Y9 h0 t, e- P5 `* k2 Z1 S, h2 I( x! U% J8 N, q; C9 t, w
2.这是request的程序
1 b1 B3 v* E( T' V//  Request a value from Extend8 d0 v/ z$ {% v9 ^# d+ U% d
//5 O7 }) Q  o! ~" u" K4 X' k
//        Initialize the variant that will hold the BSTR.  Set the variant's
6 g7 t1 l7 {) M4 E+ h//        type flag to indicate the fact that this variant holds a BSTR. Place the% u5 z/ w! G2 F2 J
//        BSTR into the variant structure.
. O( J  o9 F6 o. I# I3 t; {/ R- M7 Z$ _3 f9 L7 K
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
$ {) y5 r( A! g- v       
0 j2 c/ }1 f9 @7 P         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
# T0 I" X6 w5 z! d* K1 h        VariantInit(&requestVariant[0]); / G8 s; l$ k+ |2 e9 t( N* y+ S
        requestVariant[0].vt                 = VT_BSTR;
0 ^# X4 _! A5 q) q* h# r        requestVariant[0].bstrVal         = itemStr;
- ^0 h0 f! u, T: K0 i' j& s& P/ ~! j( {) W, T- N) E1 G; b/ @/ o
          topicStr                                         = SysAllocString((WCHAR *) L"system");
! A- R: [0 l4 l0 G8 o  D        VariantInit(&requestVariant[1]);
% q; u" |) Y1 y  ^: t4 t  G( O: }        requestVariant[1].vt                 = VT_BSTR;
5 Q8 _6 E9 S$ N3 X5 V$ m$ w        requestVariant[1].bstrVal         = topicStr;/ f+ v9 Q' Y( x

+ L1 z  U1 _' |; \+ X- C//        Set the DISPPARAMS structure that holds the variant.
5 E0 u+ A5 }3 h  e
) N4 T4 ^. K  }, e        dp2.rgvarg                                         = requestVariant;
* y, r6 R" l; y- B9 O        dp2.cArgs                                         = 2;; g- ]# J( x. {
        dp2.rgdispidNamedArgs                 = NULL;$ L7 S# `2 m  P! f
        dp2.cNamedArgs                                 = 0;
2 [" E, v2 \0 S- I0 ]. K! k* j# F# s+ N
        var.vt = VT_EMPTY;
* h: }+ k5 c. F8 g* O3 b7 o% r+ l  }
//        Call IDispatch::Invoke()
5 J4 _/ \8 z4 B7 W% k
; O* l( ~6 R+ ^, N% r5 ]/ B) Z        hr = m_pDisp->Invoke(
& ^+ G# m8 Q8 b5 b% k+ B                requestID,& x7 i) y( i1 F% j; ^
                IID_NULL,
& ~$ W  ]4 p; J8 G* A+ R                LOCALE_SYSTEM_DEFAULT,
- u  }3 t. }" p2 V- L: e; \                DISPATCH_METHOD,5 G9 v" r* @& f2 J
                &dp2,; q4 C" w4 s! {5 C" L
                &var,' n! h  a: }! b2 }
                &ei,
* t% P% f) P0 Z                &uiErr);
, T/ u+ b7 o9 F; W5 O" t/ G
1 ]0 L: U# n# A6 R        SysFreeString(topicStr);% A% A' D: H  S, D: R
        SysFreeString(itemStr);1 l7 G3 t6 X; I$ f9 c& ]; g' E& ~
请问该程序是获得extend里面的哪个值?
) F6 t) z7 i/ k& e1 ~! {; U" R' d: N如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-25 02:28 , Processed in 0.012868 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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