设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11991|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
! W2 Q. [: Q7 N7 qName = (WCHAR *) L"Poke";
! Q' Z( w$ \- x                 7 V9 D; S$ f' F' u
        hr = m_pDisp->GetIDsOfNames (' n* j; h/ W; ^# c, d
                IID_NULL,                                // reserved6 `6 B, }) r% S6 P3 @# c
                &Name,                                        // Array of names to get IDs for& ]0 P, @+ L6 z' b6 {0 z# a4 S8 h
                1,                                        // # of names in the array
- n9 R9 u- R/ j7 V% _                LOCALE_SYSTEM_DEFAULT,        // System locale9 d$ K; i! n5 w! g' H$ }( M
                &pokeID);                                // Array of IDs to fill on output' [' y, ~) b# t) R  ~
                       
+ Y! R  P5 v1 ~5 _3 e4 H9 z        if (hr)
5 i+ l3 g# O# F  }                {0 c7 G! m  g5 T  k0 z
                MessageBox ("Get Poke Unsuccessful");
3 j; ~8 `' t, g3 T+ O! p                return;
* f; n. g: {9 Z) A$ ]0 C                }; L' t$ C4 L: s. X
: x1 G& ], v% C7 l; }+ W
/**************************传递数据给extend**************************************/7 _6 }. m; M! Y5 A
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);5 X, n# F" G: A/ @
       
& X+ u8 a) ?/ T/ m3 Z1 u: T         valueStr                                 = SysAllocString((WCHAR *) L"1232");2 I2 b, t/ p" D
        VariantInit(&pokeVariant[0]);
+ x. O( U9 {' w  p, ^) E& |        pokeVariant[0].vt                 = VT_BSTR;
9 x* k: u+ e& q+ s5 p: J        pokeVariant[0].bstrVal         = valueStr;8 P. u7 Z, n" w) }/ f8 Q. B, d

, i; _+ J( {5 Q, B5 k' W         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");0 ~9 f* U1 P, H1 u% R
        VariantInit(&pokeVariant[1]); # n% O2 G. s$ w" c, I# h
        pokeVariant[1].vt                 = VT_BSTR;
: ^2 i" u8 g+ r; i        pokeVariant[1].bstrVal         = itemStr;
4 N' s4 Z, S# j8 A5 T
9 W& V+ J/ r# L" Y; V1 m/ M          topicStr                                 = SysAllocString((WCHAR *) L"system");
$ P, |" W. [7 ], D        VariantInit(&pokeVariant[2]);
4 d; f  i- w( W  b4 a1 S( h/ u9 E% I        pokeVariant[2].vt                 = VT_BSTR;
) Z. k. \1 G8 q7 q0 Z7 ^        pokeVariant[2].bstrVal         = topicStr;4 S5 l! j, H7 f# U& H! O# h! \

; f+ y6 c  s/ o6 }//        Set the DISPPARAMS structure that holds the variant.1 T$ x; w0 v4 q6 ]# \: b; x
  Z! p5 f- W% ^  O- W
        dp.rgvarg                                         = pokeVariant;2 ~5 Q  b: V3 L
        dp.cArgs                                         = 3;
% |0 R2 \9 H% S8 _) B        dp.rgdispidNamedArgs                 = NULL;4 @1 o  N# p3 z' s' Q# s
        dp.cNamedArgs                                 = 0;
8 \3 i, Y+ K9 }" x; d" m4 R; L) f1 L/ B  a+ m6 z( d
//        Call IDispatch::Invoke()
2 ~0 s: U8 l5 h1 O, |3 q4 G
: ~8 n& O: r# b* A/ ?        hr = m_pDisp->Invoke() _6 [# T3 \6 ]! k6 ^  ?+ p
                pokeID,) y8 B+ A- q  b* u. k- g
                IID_NULL,
0 O* @' o8 W( h1 W- G3 H! r                LOCALE_SYSTEM_DEFAULT,
1 T( j# v" Q, K. i                DISPATCH_METHOD,
4 y! x, M4 o! R0 n7 l# z9 o1 a                &dp,
' g) M# [$ [, A                NULL,
* J6 g" E9 i/ F7 @                &ei,8 p5 Y' v0 j8 K) V
                &uiErr);
( j9 G, H; b9 h' G% k7 G. _4 A4 p# X; v" x& h
        SysFreeString(topicStr);
, T9 `( z/ ?2 q8 z/ e9 @        SysFreeString(itemStr);
6 Z! S' r$ [/ v/ w& d! A  C/ U5 h        SysFreeString(valueStr);
* M2 J5 b! G& X0 O4 l& ^
3 w8 s0 c0 |2 C/ ^0 f% S- o现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???, i8 f7 [/ K5 S5 N$ ?
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
, O: h  v/ U# k% F: |) X& g. m2 ?* D

3 U+ s2 z, \# l% Z" F7 ?# [' C2.这是request的程序& k7 {( H1 I% n. g9 w$ W. Y9 x
//  Request a value from Extend
+ t! c* e" \7 Q8 |//
9 T! G* k/ D% ?3 E//        Initialize the variant that will hold the BSTR.  Set the variant's
% X* K; ?; ]; `& \//        type flag to indicate the fact that this variant holds a BSTR. Place the$ F0 h( a5 b! V
//        BSTR into the variant structure.1 n3 ^7 W  e( ^3 {# d6 t4 y
8 K( ~% q5 O* C) ^' _
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);" }& y# z. G2 X. l6 n# m1 x& {6 A. z
       
. m" N* m) |  @9 o9 ~$ e         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");! T* Y2 g: Y0 A
        VariantInit(&requestVariant[0]); 4 B# H+ E$ L0 X2 J
        requestVariant[0].vt                 = VT_BSTR;* B1 l  b$ |+ C
        requestVariant[0].bstrVal         = itemStr;
' z4 e. q+ B6 t( i5 D" R3 |& ^
4 w/ k; V* C6 f, E          topicStr                                         = SysAllocString((WCHAR *) L"system");
9 `7 P( ^  [& ?        VariantInit(&requestVariant[1]);
7 J6 p' ?# n, H, T4 M8 r        requestVariant[1].vt                 = VT_BSTR;  Z9 N( W/ m$ ?
        requestVariant[1].bstrVal         = topicStr;
5 Z) p+ L+ O  u2 R" g
: F/ p2 Z' E3 f: V//        Set the DISPPARAMS structure that holds the variant.
7 R2 e# ]0 {/ f& U" Q: f" q0 w* |8 x3 p2 ?' K# h  x
        dp2.rgvarg                                         = requestVariant;
* z# m9 g6 s* @1 V        dp2.cArgs                                         = 2;# s& z$ n( d- ~, X4 X" Y# J
        dp2.rgdispidNamedArgs                 = NULL;5 W8 J. }0 `# c6 t. h
        dp2.cNamedArgs                                 = 0;7 x8 I# e3 F0 H. F- r# z

6 b9 _9 n) `7 H) g# K/ C         var.vt = VT_EMPTY;1 h; }* F" c! r5 X6 f3 _1 ^
, D9 C5 j; D# ]/ h0 S+ C. u
//        Call IDispatch::Invoke()
% s8 W! |5 B7 I$ r4 M6 H; l  O/ ?$ F/ d  b8 K
        hr = m_pDisp->Invoke(
7 h0 j( o, Y3 O7 f4 p                requestID," z/ ~3 E+ h# h. A
                IID_NULL,7 ~# \$ y( N- S- W1 p
                LOCALE_SYSTEM_DEFAULT,3 S& F% J/ i) O, O
                DISPATCH_METHOD,
+ m- B% K7 D2 r# d* U- k! L) i                &dp2,1 W8 }, T$ a: P' }* e
                &var,
+ L( ^0 ?2 {. ^) Z& i# }, m                &ei,  b9 p; m3 @# A; b9 R
                &uiErr);6 w/ f7 Q+ s$ w3 Z8 k
3 }* M  Q9 ]3 w) R- x" N
        SysFreeString(topicStr);
6 c) h7 e( w2 D% i0 X* g        SysFreeString(itemStr);- \  O0 b0 V  ?+ L
请问该程序是获得extend里面的哪个值?
4 S! R# j, e* ]; y  _如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-7-27 12:33 , Processed in 0.016622 second(s), 13 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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