设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10944|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:9 N. z' ^1 I5 t/ B# m) [
Name = (WCHAR *) L"Poke";: n; [7 D: |& ], ^9 q9 C( n
                 ' t+ j) w5 H- d7 q2 j/ `6 |# J
        hr = m_pDisp->GetIDsOfNames (" b) G5 d9 w, ^$ o& E* b! |
                IID_NULL,                                // reserved# j* W4 m) w' U; r: k
                &Name,                                        // Array of names to get IDs for7 ]; C% K! M! A
                1,                                        // # of names in the array
. E8 b) c. `, |: {% r1 n                LOCALE_SYSTEM_DEFAULT,        // System locale
! a- [- J) [$ u  o1 r9 \+ X/ Q                &pokeID);                                // Array of IDs to fill on output/ u) P' j3 @( O* ]2 |$ |
                        ! n: I5 v# b3 Z) J2 m7 S
        if (hr)
. z8 _' |) M" I' v                {0 c$ d5 l" k0 G4 ~
                MessageBox ("Get Poke Unsuccessful");
# {, y7 v$ A3 [6 ~* p5 e! `4 f  Q                return;
; f* @. X1 _, U: M                }  a- u- d7 s- R+ a& y1 v

  a& F% ^+ }! |9 R: H/**************************传递数据给extend**************************************/2 Q! d( N, k2 z
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
7 V+ _$ Z4 O8 n, ~1 \' `       
4 G& V7 I2 \0 B         valueStr                                 = SysAllocString((WCHAR *) L"1232");
1 j$ v, p2 o& m8 p5 S' r        VariantInit(&pokeVariant[0]);
$ G  \. ]% n# a) R        pokeVariant[0].vt                 = VT_BSTR;
; Q' j0 ?, X* j) I" V- z        pokeVariant[0].bstrVal         = valueStr;$ h1 Q! `, \, B/ n: i% v' I8 M
8 a9 [! u# M2 l/ l  b9 o0 [
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");1 e* h9 x$ l" m; w- Y' `
        VariantInit(&pokeVariant[1]);
$ c* ]9 H4 l# f- d1 b  U        pokeVariant[1].vt                 = VT_BSTR;
, B) K+ _/ V: M5 x( k: n4 h        pokeVariant[1].bstrVal         = itemStr;
# O7 u5 u5 a: F: ?( S1 S8 \
& L* ]- _9 E' U/ b" u          topicStr                                 = SysAllocString((WCHAR *) L"system");! i5 P) [4 G2 A  c& X+ ^
        VariantInit(&pokeVariant[2]);
0 C* b9 E- K4 Y5 _        pokeVariant[2].vt                 = VT_BSTR;
5 n) I, X% N) x; u  |8 U        pokeVariant[2].bstrVal         = topicStr;
7 ~6 G- w( \, i8 M8 l4 h+ f( i* O' ]' z! T
//        Set the DISPPARAMS structure that holds the variant.9 H  W; e6 E% \9 c

9 I8 ^" P3 `7 x) ~, i        dp.rgvarg                                         = pokeVariant;
% N4 d+ v: H8 w8 J. m2 x  l        dp.cArgs                                         = 3;" G; ?+ X; F0 b% a, g1 I9 R, M( Q
        dp.rgdispidNamedArgs                 = NULL;
+ p% Y2 f7 U" @& H4 H& K# R- r7 I        dp.cNamedArgs                                 = 0;
% t; E  e) H  q/ p' w/ f% e2 r# L. K: g: B9 c& n/ V
//        Call IDispatch::Invoke()
5 \3 \/ g  ?+ o4 m+ F" P5 ?/ [/ e# T5 z  {( t5 {' t: w- ]
        hr = m_pDisp->Invoke(
  J7 g; c! `" o/ B2 ~$ W! f& j. r1 R& _                pokeID,0 d4 p  N- V$ `
                IID_NULL,' j+ J  q5 a: I5 ~
                LOCALE_SYSTEM_DEFAULT,5 O6 l3 q, Q7 B6 |
                DISPATCH_METHOD,
. q( C8 G- j1 [8 q) c3 d                &dp,
- i$ k4 z1 A! a                NULL,
$ e5 b5 O" s- x8 ?6 p( U7 L! p                &ei,
% @( e, B3 S( |8 J' O; |: E' F! u                &uiErr);% m3 }4 Q- a6 ^4 _2 _. e4 T
# H: t2 W* N. w; t" k0 r5 z; n
        SysFreeString(topicStr);4 y; C3 r! F# ~; M  h4 L, T) r
        SysFreeString(itemStr);
) ^8 K: b0 G; N* x- q, {        SysFreeString(valueStr);  ^/ n, {: Z, G8 Q  s' |
+ o, R& \$ P3 }7 _1 W! x" t
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
: R' j3 T8 B% ~( w1 a% E此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
# N( ?* b9 ?+ |3 N- g
! i' i5 q, G. g( v" [% \) C: J/ H0 q( |" S" x8 c- S' e# X$ e
2.这是request的程序2 f: Q# k  r4 _0 _. ?. W3 x
//  Request a value from Extend
/ F  U- v0 y( p' ?, M; X  d4 G8 a//
) M: f- R- [  u8 U: [//        Initialize the variant that will hold the BSTR.  Set the variant's
4 H' I) f5 B1 F9 l! ]7 A  N//        type flag to indicate the fact that this variant holds a BSTR. Place the4 l7 i7 H0 j) @7 u' _+ J
//        BSTR into the variant structure." L0 X/ u8 v# M. l
% G- a* s) W1 A% e% j
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);6 D* U0 n# E) S" a" e2 k6 U% F% I
       
- ?7 a5 g- V" |& R         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
7 y9 i( E- V) M6 N        VariantInit(&requestVariant[0]);
& o' l; [0 V0 p        requestVariant[0].vt                 = VT_BSTR;. P' P1 `' U, P
        requestVariant[0].bstrVal         = itemStr;
$ o3 q, c! e- v9 t- j( @/ d7 {2 [, I; K; o
          topicStr                                         = SysAllocString((WCHAR *) L"system");+ M0 o9 x* q7 b& O) w! Z7 U9 ~" J
        VariantInit(&requestVariant[1]); " |9 M) x! i1 w' O% ~, v
        requestVariant[1].vt                 = VT_BSTR;
* P% d  n- ?9 T0 U        requestVariant[1].bstrVal         = topicStr;
' L  X/ k7 |/ B+ N- `# Y1 ?3 ~+ F( Y9 P5 y6 x3 j; o
//        Set the DISPPARAMS structure that holds the variant.
3 ^* f- E9 }; s+ z! S3 A3 {$ L4 X1 D! d0 C, l1 ~+ y
        dp2.rgvarg                                         = requestVariant;( Y, w! w4 Z8 B2 ?& u( k
        dp2.cArgs                                         = 2;
  @; n$ r" [4 i$ a        dp2.rgdispidNamedArgs                 = NULL;( ^5 B! ~, j1 g( {$ A: C4 s
        dp2.cNamedArgs                                 = 0;
1 C6 J9 N: [. h) [0 F7 [; {. ~! [0 a
        var.vt = VT_EMPTY;1 Z! K0 [4 [  b% \
4 v8 d/ M/ i8 Q! j5 d
//        Call IDispatch::Invoke()
- ^8 w. h! U) ]2 g4 ~  ~
* B) e  c' e8 @4 N! Q        hr = m_pDisp->Invoke(/ Q- u% s% j$ Y% ~8 o5 N
                requestID,3 m- L& z1 P2 _# }/ e* t+ W6 }% t
                IID_NULL,
' h7 i0 Q( a3 V4 b3 ?$ s) N                LOCALE_SYSTEM_DEFAULT,9 Z4 \7 P  p% G6 T" H1 @
                DISPATCH_METHOD,9 W9 U! c. A3 G1 L9 ~1 W
                &dp2,
9 E1 Y0 L5 m' p% N( v                &var,
$ Z0 w( r* s, e# t! g. B                &ei,
# z. {3 l! R' S                &uiErr);% V/ [" ?; O% ~" @; \
) R% r9 W: K% q# X3 N3 b$ h$ x5 B1 D
        SysFreeString(topicStr);; ^+ C5 ~& J6 O( w5 T" A
        SysFreeString(itemStr);' ~% r2 Y. Z! Q8 ]' [( F- I
请问该程序是获得extend里面的哪个值?
1 z( O" e* _* I5 S1 e2 e. \如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-19 07:21 , Processed in 0.012102 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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