设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6927|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
+ V; ]+ A% H- ^; N* qName = (WCHAR *) L"Poke";
) O. V' c1 ^( C" B5 B                
" E& x8 E+ i( R$ y9 z: I9 j9 }        hr = m_pDisp->GetIDsOfNames (2 J6 {1 C$ b/ w; Z( w' d
                IID_NULL,                                // reserved
+ K' u7 Z8 t9 |' M9 L; t: a                &Name,                                        // Array of names to get IDs for2 }) L; t' Y, v& \1 N
                1,                                        // # of names in the array
2 ?# E" L% C. R. J' Z2 e" W5 v  S                LOCALE_SYSTEM_DEFAULT,        // System locale+ u% o2 R1 Q' R- d9 ]
                &pokeID);                                // Array of IDs to fill on output
9 X- ]4 |, \4 I- }+ u0 C1 ~0 L4 a8 h0 r                       
' c6 w$ ^1 t/ A, @7 [' o        if (hr)6 V7 K8 A2 t& g
                {, e& g" f; u( W. ?! ~
                MessageBox ("Get Poke Unsuccessful");1 `6 b% g* O5 D/ P: s
                return;% t, r7 }+ j* }, \
                }4 K! `' ^- \3 P9 H0 A9 S0 q

% ?& u4 j: m/ F$ T( |( J1 R7 `; J/**************************传递数据给extend**************************************/
7 Q/ y0 z  k. d5 y- s0 F  U        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);6 t' O2 U$ a# s
       
! {) c& c: d" T9 g. M4 @         valueStr                                 = SysAllocString((WCHAR *) L"1232");
& t) _5 R. s- ?8 L, K0 u        VariantInit(&pokeVariant[0]); 0 K! O8 e! T" F/ A; Q/ f2 ~
        pokeVariant[0].vt                 = VT_BSTR;
( h) V3 P  @- k" U1 O        pokeVariant[0].bstrVal         = valueStr;
( j% ]- k. q5 y# z( z* O: z4 B4 _, j7 r1 p# _5 @
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
' o+ q/ [; z. t0 J/ ^/ o. i+ R        VariantInit(&pokeVariant[1]); ' Y% }( y7 G' C" `
        pokeVariant[1].vt                 = VT_BSTR;! y: `; f+ h0 |' m, s
        pokeVariant[1].bstrVal         = itemStr;/ n& g  R1 Z/ _, {4 l
  ^. H& j& H8 C3 M
          topicStr                                 = SysAllocString((WCHAR *) L"system");7 U1 y& Q. d  I: J
        VariantInit(&pokeVariant[2]);
) N+ p+ C: t" [" M6 s" m* s: Y        pokeVariant[2].vt                 = VT_BSTR;
2 ?: B4 F; t( @5 h- \8 a. @4 g        pokeVariant[2].bstrVal         = topicStr;
' {$ t# @. y, t
" k! t7 ]) Z, X3 x* H: y! ^% z$ x//        Set the DISPPARAMS structure that holds the variant.
# A4 r8 Y% P! h& X: N" ]6 j/ P# S  J3 f3 A5 }: A$ O
        dp.rgvarg                                         = pokeVariant;5 j) @9 D8 c" Z# t+ ~
        dp.cArgs                                         = 3;
0 R4 z' F1 P9 d( I. z1 S+ d% r        dp.rgdispidNamedArgs                 = NULL;" Q! [2 C0 N8 T  `( L% ^
        dp.cNamedArgs                                 = 0;7 N/ Q7 d  g4 n; P
1 L) ^$ M( G0 v4 U6 D! Q# t
//        Call IDispatch::Invoke()% _: r; f2 c- C4 t- x+ i
% r* @! B5 b, g
        hr = m_pDisp->Invoke(6 a1 F& w7 J, m; G8 }- e5 [: v
                pokeID,$ t" p+ a1 s# b3 Y4 ^5 u
                IID_NULL,. h! _" F3 j1 u, x
                LOCALE_SYSTEM_DEFAULT,# n8 |; u( h1 E) u0 ]* C) _
                DISPATCH_METHOD,
3 M! [  \/ L" }7 _% ~* ^2 q6 T                &dp,
& k* v1 ^2 L/ G+ V3 ^8 K                NULL,8 v' p: U; q# O! }
                &ei,
% v8 {, }; ~5 ^, w2 `" H                &uiErr);0 [- J6 X$ l% ]+ t

- p  S+ _5 H) o. v- {        SysFreeString(topicStr);
5 z( h' S4 _. s- K6 E' j        SysFreeString(itemStr);  H/ v6 L& f! F6 O/ P
        SysFreeString(valueStr);
3 c, y/ d7 l' E" i7 D" }7 q1 U
. H/ E* O5 V2 C' s2 s6 u* s8 W现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???" v. U7 b1 s- ~& H* v  @6 f
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????, S% I( W4 V( N9 g! K8 y. w) ?

. q$ }& J9 ~" y( g1 [
' o' U# h/ ?4 h2.这是request的程序0 @: W  C5 W, H8 A5 W+ x) u- E9 ^
//  Request a value from Extend
% b8 ]  k5 r% y: w//5 h4 h& z5 |7 ^% r1 Y4 y
//        Initialize the variant that will hold the BSTR.  Set the variant's
( p2 {7 \& ^" Q( O$ F4 a: S. i: f//        type flag to indicate the fact that this variant holds a BSTR. Place the9 u" Y8 A  ]$ R! K7 E# _+ `) g
//        BSTR into the variant structure.
' ~, @! t6 b7 X3 u% {6 ]0 M; p7 L- u$ J2 a5 }
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
2 d; F9 _- b( R$ T! W4 J% D        5 g9 K, \1 J! ~- p6 M. `, x
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");2 |; {# U* p$ s8 V  X7 B# s
        VariantInit(&requestVariant[0]); 7 ^0 s, T, y; H3 U* i/ s" f# Z
        requestVariant[0].vt                 = VT_BSTR;
$ V! `7 l6 O3 I4 W7 a& t+ k        requestVariant[0].bstrVal         = itemStr;' u" z% P; c4 K6 n( e3 |2 E) n

% j% [( a7 y( N( L* g4 q% P          topicStr                                         = SysAllocString((WCHAR *) L"system");6 S- T2 q+ i. L( @6 V' R% H: j* `
        VariantInit(&requestVariant[1]);
  ]( R0 r9 S; A* z& u        requestVariant[1].vt                 = VT_BSTR;& o4 _/ [3 C$ @# D/ F' O7 \- _
        requestVariant[1].bstrVal         = topicStr;
# z$ f& D: o  ?2 U
: M; Z# t/ H! @  u! X, c* ^//        Set the DISPPARAMS structure that holds the variant.
4 o1 q6 M( x0 w$ u( W: j: O  m( d- Q/ a9 E
        dp2.rgvarg                                         = requestVariant;) t4 n' u7 B$ E( Y6 L) k5 ^7 Z9 j
        dp2.cArgs                                         = 2;# `0 Y. J- @! W" @; K9 |
        dp2.rgdispidNamedArgs                 = NULL;/ g- E4 g, b: M/ P. N/ {
        dp2.cNamedArgs                                 = 0;
. b" i1 d3 {, D) j
7 g4 s4 c; K' J' X1 c: @' v6 I2 R0 I8 P         var.vt = VT_EMPTY;3 M$ V+ i9 f5 D. k" d, n
1 [8 u4 D5 N/ m: ]" ?
//        Call IDispatch::Invoke()+ Y- F. G9 o8 D7 P- x, i/ E. \

6 D5 D3 }, D, `' H1 }9 U        hr = m_pDisp->Invoke(
1 E$ }9 D* b* t' ^. _; z; `, T                requestID,
, `4 m- N1 l- ?( {$ F; a                IID_NULL,
9 Q' I/ w/ ]  o, S; x8 v5 `                LOCALE_SYSTEM_DEFAULT,
5 |% x' F8 \: e# r8 r& B7 Y  a                DISPATCH_METHOD,
8 k3 l: t# l0 Z                &dp2,
) |% K+ x* z3 W1 n; _                &var,7 ~2 ^, N1 g1 ^5 G3 `7 V
                &ei,
/ D1 \( \8 D* d8 ]& ]                &uiErr);/ o. t  F/ v3 y" I9 z: q
) W3 _. s8 p7 v
        SysFreeString(topicStr);4 K. k2 N" s- K) ]
        SysFreeString(itemStr);
$ z: Y$ \7 K  \& ?% ?" o9 ^请问该程序是获得extend里面的哪个值?
8 V5 o8 r2 d/ t; }. d7 U- ~如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2025-12-12 13:36 , Processed in 0.014991 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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