设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8938|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:/ A: W& m+ z3 r( {& g+ k" Y
Name = (WCHAR *) L"Poke";
4 V  y) B# I1 c. n0 p                
+ M! Y  A, o) j2 N        hr = m_pDisp->GetIDsOfNames (0 ?' E4 d; S; D" u* V
                IID_NULL,                                // reserved
0 _9 a4 Y1 |; o4 h                &Name,                                        // Array of names to get IDs for
( G$ P* R7 `/ ^% |                1,                                        // # of names in the array* M) l- B, Y$ j
                LOCALE_SYSTEM_DEFAULT,        // System locale
/ l3 P/ L3 V$ Q  q! U& Z+ f! I7 Z                &pokeID);                                // Array of IDs to fill on output( Z, j+ a/ ~  \* W: L8 e
                       
$ q% S# D, L, y) R( ]# s! z6 G9 I8 x        if (hr)5 i* `3 J' E* E! k; d/ D8 n
                {$ T# S1 w0 c) \( y! C
                MessageBox ("Get Poke Unsuccessful");
& r: N% R' C; N4 N, L/ @                return;
) X% S/ V0 Y" l  M/ k; d                }
- ]+ {3 C7 v" Q) W$ n+ j9 g5 O" A1 H/ {7 K; |5 V
/**************************传递数据给extend**************************************/& ]- o* i+ ~2 e2 p7 R0 Q, T
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
$ W; L, u5 F& H3 h/ w       
- N6 g  ?2 G$ `, o- m         valueStr                                 = SysAllocString((WCHAR *) L"1232");8 k: g8 Y" }$ l6 |/ f
        VariantInit(&pokeVariant[0]);
0 T6 F3 X; V+ e* C) X        pokeVariant[0].vt                 = VT_BSTR;
- F5 h+ M( h" T: J  c        pokeVariant[0].bstrVal         = valueStr;
. ]4 |9 a2 e# N& t2 @) \/ g6 a" ^' u; k8 e. r& _/ @, w. ^) H) J
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");, W7 e# O! T# {
        VariantInit(&pokeVariant[1]); % ~+ o. N: X  w
        pokeVariant[1].vt                 = VT_BSTR;
5 }; d% [5 g& ?2 G        pokeVariant[1].bstrVal         = itemStr;
) `! I5 G; c, {8 T8 W( J0 ^* v) J( D$ P3 R
          topicStr                                 = SysAllocString((WCHAR *) L"system");
/ K' @+ `8 S# t$ X9 d; V        VariantInit(&pokeVariant[2]);
' I5 M6 g( g7 {! J$ j8 q        pokeVariant[2].vt                 = VT_BSTR;
9 x( ~1 L. o: M" G8 I1 b: L: c6 C        pokeVariant[2].bstrVal         = topicStr;2 ]. r2 o" U6 C- a6 y+ m

. @- g* U% V/ X//        Set the DISPPARAMS structure that holds the variant.6 s# L1 Y; k8 k& ~- s4 j  W

  A* L9 }& G/ n/ Y9 U$ p        dp.rgvarg                                         = pokeVariant;
( T$ a+ ^( o  q) X4 D        dp.cArgs                                         = 3;
1 f, Y# i  h+ B. x        dp.rgdispidNamedArgs                 = NULL;0 t, A# F3 X- E2 u6 c( }9 W6 R
        dp.cNamedArgs                                 = 0;' ]1 u4 \; v5 y# C
  O- S5 ]% F& G* I- l  O
//        Call IDispatch::Invoke()' o. k! h5 z8 k9 o3 W1 [) L7 }7 E
/ z. l+ D' P3 T
        hr = m_pDisp->Invoke(: Z$ H+ o8 D5 j4 h! J) M; e
                pokeID,
: N9 q$ u0 E- S- O# p: l                IID_NULL,5 ]8 m" _' P5 D) D0 u
                LOCALE_SYSTEM_DEFAULT,7 a5 V0 p0 C  H
                DISPATCH_METHOD,
! U8 @- B* N9 z' @8 C                &dp,, q% D; h& E; d; P) n# O
                NULL,; m, W3 ^6 x' Q  V
                &ei,2 h; Z  E2 W: j5 a
                &uiErr);
# O' s' h- O& L; B( w4 Q
$ q. M- r/ @- U$ H        SysFreeString(topicStr);
/ n. s& X# f0 [, A7 F) S2 O        SysFreeString(itemStr);
& c# g1 s0 x3 l; W        SysFreeString(valueStr);
1 T4 Z+ O/ }, ?# G: W! Z$ r3 c) U* Q" k( S
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
# {' ^& q, b/ x此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????2 b  h( C( ^) r

3 e( J$ N+ K. n4 S2 U1 P
6 d7 R2 p$ g  G' ^* r" U/ \2.这是request的程序
+ `+ ?+ g) G2 ^//  Request a value from Extend
+ [1 B& _" Q; G1 I  {% v//) i' j# q# p6 X: F6 V% l
//        Initialize the variant that will hold the BSTR.  Set the variant's
$ Y7 G$ N. L- F; d//        type flag to indicate the fact that this variant holds a BSTR. Place the4 [2 @& E  m3 B4 f1 U; W
//        BSTR into the variant structure.  ?1 `" e9 C8 e4 e0 g
: J( K0 |5 a; F2 N  Q, V
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);  H, p4 [  u+ D0 F0 n% _  N7 V7 K8 b
        , T- r2 u5 V) z. X" {6 K
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
: d1 d+ @% P. ^4 @( j1 ~) x        VariantInit(&requestVariant[0]);
, w# M9 I$ s+ Y        requestVariant[0].vt                 = VT_BSTR;
9 T1 s6 u! j( W4 F        requestVariant[0].bstrVal         = itemStr;
. F- S5 u  H4 N" U3 {* w- v9 f; d9 c4 p% p/ D
          topicStr                                         = SysAllocString((WCHAR *) L"system");
; |/ F2 E& ~5 M! f        VariantInit(&requestVariant[1]);
' `, r$ |2 O; C        requestVariant[1].vt                 = VT_BSTR;
: ]5 A5 e# Z; [        requestVariant[1].bstrVal         = topicStr;# w" o2 O8 r# ?3 E( r) e
' ?, S2 y7 b1 a) x  I( y
//        Set the DISPPARAMS structure that holds the variant.
8 R. M, L2 |" o1 _9 H/ T8 ]
5 s6 p* k: I4 P1 L' x) `        dp2.rgvarg                                         = requestVariant;
* _  v; s3 k" M3 ]" h" {& f& s2 e  y0 W! q        dp2.cArgs                                         = 2;: J" `4 h  Y* T$ W; J3 X& y" R1 w
        dp2.rgdispidNamedArgs                 = NULL;
% e1 O  w! P* s9 G        dp2.cNamedArgs                                 = 0;
" h! n6 Q8 J% o) ^, m- a, J3 ]
2 f% r2 M$ Z: v6 K) G  y4 e         var.vt = VT_EMPTY;2 i' s2 L) r$ f0 k5 h7 {! o
& T8 \+ e% ~6 Z' P
//        Call IDispatch::Invoke()6 H  C& O5 Q3 U# E+ L; f4 Q. l

! V% Q# ^4 g0 P( j        hr = m_pDisp->Invoke(6 p) o" }/ g* F# G! m6 ?8 y- d5 h
                requestID,; V0 D# {7 w& J; N+ b1 u
                IID_NULL,5 e! Q% e/ {  v/ G0 q/ x9 c9 b
                LOCALE_SYSTEM_DEFAULT,7 ?0 W  c, m5 i+ ^
                DISPATCH_METHOD,5 {4 q0 P3 t6 y( c: b  u
                &dp2,
. e. R" ~# V0 |1 e4 G, V                &var,! D" K" p1 e" |2 N7 e7 r
                &ei," d0 _' r7 n2 W* x
                &uiErr);
" |! F% {, J" H- ]- l5 f0 ?# H
* S% H( }$ Q: M  i1 U# [        SysFreeString(topicStr);
$ c! L- p% c5 n5 F4 ?        SysFreeString(itemStr);7 L) k/ z1 Q5 x4 w' T
请问该程序是获得extend里面的哪个值?; U7 i% [' _! i3 @
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-3-25 21:10 , Processed in 0.017351 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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