设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12346|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:1 q6 \5 w# n& {3 U
Name = (WCHAR *) L"Poke";
; ^. W2 S5 X/ b3 R6 I                
8 G8 k- w$ d3 Y' r        hr = m_pDisp->GetIDsOfNames (5 P  \3 p! B$ w7 C. ~
                IID_NULL,                                // reserved
5 J- O1 q$ X$ j; v1 e: k0 G+ a                &Name,                                        // Array of names to get IDs for5 Q& _! Q" o9 A& S: X! E% t+ ~
                1,                                        // # of names in the array% {7 w, t# j& o' i& w6 S
                LOCALE_SYSTEM_DEFAULT,        // System locale
" c! j7 ^7 b  N" {1 r. j5 G                &pokeID);                                // Array of IDs to fill on output3 S; ^* o9 f+ l; D' o5 `: u. Q* k
                        . d3 o- O. q7 O6 F* X1 R
        if (hr)* G6 E; }7 V9 J9 M$ _/ D6 h
                {
, `8 K0 c/ W( N2 \) T; L0 Z                MessageBox ("Get Poke Unsuccessful");
7 b6 q& S) S" Z; L- t                return;1 H. K$ V1 z7 T) t: i% R8 A/ k
                }
& o1 H/ Z1 O. M
0 L- Q/ R  y; Q8 \- G/**************************传递数据给extend**************************************/
) d) z+ v0 r- O        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
( C5 M/ A6 i$ ]# G5 K+ d       
; {) `# e2 z0 v/ Q2 d" b7 X         valueStr                                 = SysAllocString((WCHAR *) L"1232");) e  r( O" ^1 @! d) D; `+ x& Y
        VariantInit(&pokeVariant[0]); & q( w" q7 u4 O% G- @# m" A& n
        pokeVariant[0].vt                 = VT_BSTR;
: x4 A% m6 Y7 Q! c. a        pokeVariant[0].bstrVal         = valueStr;
% I0 c& X( d6 }: k3 D' M# G* u, f
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
4 Z: V" X( f% a        VariantInit(&pokeVariant[1]); % B9 ^8 b8 a. \5 ]3 ^5 p9 N# s2 ]
        pokeVariant[1].vt                 = VT_BSTR;
1 W/ ^: W7 R, l! a! ^; d        pokeVariant[1].bstrVal         = itemStr;
5 X# W7 t; p8 l% _2 @( d$ j" n4 O
: y. O: h! r) ]9 o. D# v0 Y          topicStr                                 = SysAllocString((WCHAR *) L"system");
& Y* f& [7 f$ K4 X        VariantInit(&pokeVariant[2]);
* }" g$ P% E: b/ u        pokeVariant[2].vt                 = VT_BSTR;
+ e: t3 v1 m9 W4 n1 K6 \; S        pokeVariant[2].bstrVal         = topicStr;: z. _9 Y( W/ E/ E5 }
, x- W& ^, M; l- u
//        Set the DISPPARAMS structure that holds the variant.
- e& g; \% U6 s- @, b& N0 C5 @8 f! I% t% ]. L3 G$ v5 k4 M& t% A6 \1 d
        dp.rgvarg                                         = pokeVariant;' C" w9 B4 J' B4 f+ `; B. P. W
        dp.cArgs                                         = 3;
) Q1 M% N; c* g        dp.rgdispidNamedArgs                 = NULL;
. e+ t+ L4 Y/ N        dp.cNamedArgs                                 = 0;8 f+ ^1 `" A& R8 L

) j" K# Y7 Z9 W4 V' N; r//        Call IDispatch::Invoke(). R7 s/ _1 ]% o: ^! U; M6 Y& f

3 \  C8 p$ }: x        hr = m_pDisp->Invoke(. O+ @' @7 a% y' @/ C
                pokeID,
! i: f: J0 [  q% Z                IID_NULL,
9 \( e  P8 {. U* S                LOCALE_SYSTEM_DEFAULT,6 j8 M* _$ l' |' {- Z
                DISPATCH_METHOD,
! j8 b7 O0 o; _: v                &dp,
! n& D2 A# M% g# y7 x                NULL,7 ^- d5 m1 t) w) c, [+ c
                &ei,
; Y- a9 b5 b2 ?: m2 P2 C6 U, A4 m' S                &uiErr);) j" x- _/ F. T6 S+ P
4 G9 G2 p5 c1 M3 x" f1 j
        SysFreeString(topicStr);7 [4 @8 V! [+ y- b# H, G: M
        SysFreeString(itemStr);" J( r$ h- m$ ^+ q
        SysFreeString(valueStr);. V& W& d) w) G4 ]% k$ ]

' Y& j9 `  ^; J现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???1 Z/ i/ M/ V  @% d/ e
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????; c& G8 \3 c- s/ [8 Y

6 t; q. k8 K9 O+ r/ b" m5 L& U9 r8 Y3 D6 O
2.这是request的程序
6 [1 Y, K4 k4 |//  Request a value from Extend, C5 y% Y$ M4 Y/ e! s7 X2 m
//
* u7 ^/ l5 U6 Y" x0 w  X+ _//        Initialize the variant that will hold the BSTR.  Set the variant's
5 p" B' B/ c$ B; O- q//        type flag to indicate the fact that this variant holds a BSTR. Place the
* A, h# |* p. H: g//        BSTR into the variant structure.
+ b/ t+ h+ ?, E4 w9 }! ?& \5 @
3 B* x7 k, u0 L8 ^& [* W        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);4 O9 ?( C2 P( B7 `1 h
        : K1 [# b( r! N. Z. f; b6 O9 J) U* ]
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");& Y# E! u7 h' ~8 R
        VariantInit(&requestVariant[0]);
/ X( {  `: n8 d        requestVariant[0].vt                 = VT_BSTR;7 R1 P) S4 Z7 R+ v# F" w1 [
        requestVariant[0].bstrVal         = itemStr;
* D+ B; N8 v) k. P
/ y: g9 Z% s0 ?7 H( m          topicStr                                         = SysAllocString((WCHAR *) L"system");" _1 q* W1 P7 S1 B; @( E
        VariantInit(&requestVariant[1]); / H$ l; Q: T+ k
        requestVariant[1].vt                 = VT_BSTR;
: S: g2 X" C# T        requestVariant[1].bstrVal         = topicStr;3 ^. m  K; j: L/ x* X
" M% G) S2 t# {( Y" |7 ?
//        Set the DISPPARAMS structure that holds the variant.' E# U4 {) C7 x0 @: [
! @0 @% V& ?8 E
        dp2.rgvarg                                         = requestVariant;  [/ V0 N& H! o: E! D
        dp2.cArgs                                         = 2;
7 H0 F7 Q1 [% i1 L        dp2.rgdispidNamedArgs                 = NULL;2 _$ a: q1 ]+ O6 F5 x8 O3 F
        dp2.cNamedArgs                                 = 0;
6 q% q$ w; S% d+ c
3 r+ o! P6 N6 y/ P8 ?3 A( ~# ^         var.vt = VT_EMPTY;8 _* x, F" u% c8 N# E* @; N1 e

9 d6 D; G. l) x9 |, ?//        Call IDispatch::Invoke()
- i( M- p4 C5 S1 d  ~5 ^' n
" n% |+ x  t" O9 C: d. w, P        hr = m_pDisp->Invoke(
# X" m, K8 R& {3 t& F1 X                requestID,
6 m$ _# N: \2 e+ _5 X/ D& ~+ d3 k. t                IID_NULL,& f3 J/ b  t+ ~3 R9 Q4 B7 q
                LOCALE_SYSTEM_DEFAULT,
! Q! K) z' K$ `  |6 `                DISPATCH_METHOD,
/ N" G1 O, y' Y4 B                &dp2,% j& y& h9 R, x- r; E2 }# V2 S% R
                &var,
8 K; g; t- i( h+ [+ a. b7 q                &ei,
! O6 D0 N- R  P( {8 {                &uiErr);
' q. A" n. a6 \% C; c. n2 {
( j% t) n3 m9 t4 @8 k        SysFreeString(topicStr);
2 k. w* l! I3 E) Q* F' t2 o4 X* Z        SysFreeString(itemStr);: ^* D. I* B- }! c5 s
请问该程序是获得extend里面的哪个值?" |( L& L( _- r" R
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-8-8 19:47 , Processed in 0.016602 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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