设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8878|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:* F1 }9 R# Y% z& S+ u
Name = (WCHAR *) L"Poke";! d0 i; d8 F' S0 l
                
% ^/ Y3 g6 R! S3 f& ?& J" f$ a8 d        hr = m_pDisp->GetIDsOfNames (
7 v. B0 H! R. b' c" U6 f- T                IID_NULL,                                // reserved' i: y9 C1 z/ t: h4 }
                &Name,                                        // Array of names to get IDs for
. B+ d9 P0 g7 z' i% T- X4 x  M$ U                1,                                        // # of names in the array1 A" p- \  u0 U: n& I( p  E: d: J. X
                LOCALE_SYSTEM_DEFAULT,        // System locale
3 w+ r* g) |3 q                &pokeID);                                // Array of IDs to fill on output
1 I0 r3 r: v) {" o                       
% w$ ?( ]* V2 }$ i1 G        if (hr), ], ]. b- E4 R5 ~, D& Q& F- j
                {8 _, R: d$ }7 f0 g
                MessageBox ("Get Poke Unsuccessful");/ P4 D  O* p0 R
                return;' K& G/ q0 W/ Q& b. ?
                }: i- }& N7 S9 L& x, G) b- Q, s

7 ?1 n" r, x+ }4 |/ N0 {/**************************传递数据给extend**************************************/
5 q4 D3 a) ?+ ^2 T        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);  V; h8 d+ v; Y+ E4 R# C* o
       
/ z" @. S7 x' y5 a' [* I, v3 @         valueStr                                 = SysAllocString((WCHAR *) L"1232");
$ L" }, }! I8 J7 J+ F2 [& T        VariantInit(&pokeVariant[0]); 3 M0 M# [" h8 s1 n; e) Z, B
        pokeVariant[0].vt                 = VT_BSTR;" h: j# D/ C, v) {, S
        pokeVariant[0].bstrVal         = valueStr;
) f7 ~; k! I& Z  i6 U
% _7 f+ {0 r" x1 P' y; b; b# e( w         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
/ y8 `. g1 H1 @$ Z+ o        VariantInit(&pokeVariant[1]); 6 r! N) g! d! L( N& w5 \
        pokeVariant[1].vt                 = VT_BSTR;
! d3 ?% ~0 c: L% q# Y- l        pokeVariant[1].bstrVal         = itemStr;
4 ?& Y  C" Q; W- L* h. }  i* l; C! ~! d/ z7 }& R$ a0 x
          topicStr                                 = SysAllocString((WCHAR *) L"system");% k9 ?) K* D( G4 z5 t$ D* h
        VariantInit(&pokeVariant[2]);
! p1 E& t) o2 b7 V8 I/ Q        pokeVariant[2].vt                 = VT_BSTR;
% N" {' ~* @8 S! l        pokeVariant[2].bstrVal         = topicStr;
  D  z  A  \  ]
# w% C% g4 _) F//        Set the DISPPARAMS structure that holds the variant.
, @6 |; |5 U9 q: q0 F
/ L. W; K* ]! B# d+ f        dp.rgvarg                                         = pokeVariant;
! q0 N5 p: `! A  X  P& T  O        dp.cArgs                                         = 3;) J: p+ h1 Z( b  P- O
        dp.rgdispidNamedArgs                 = NULL;4 f6 M3 P& u- b4 p% c8 s
        dp.cNamedArgs                                 = 0;& @$ z7 \4 p0 |, H* o: M8 k

" Y, T2 i7 n( h' r//        Call IDispatch::Invoke()
  Z9 ?, ]2 f* \4 n3 S3 k1 q9 k2 w4 {/ b" h3 F1 N
        hr = m_pDisp->Invoke(
: e) d. g: Q2 @8 ^+ {                pokeID,6 ?$ A( W1 }7 W: o
                IID_NULL,
, `2 p. Z8 i6 m                LOCALE_SYSTEM_DEFAULT,5 w# S' _: @5 ~0 R3 ]
                DISPATCH_METHOD,
$ t% G  ?# {$ y  W                &dp,
7 |, V( M5 F3 V7 C% p- v                NULL,/ d! x# B$ ~6 ?% Z, `" r& \% ?
                &ei,
$ W( I4 c) @$ b4 s: i& w& Z' g                &uiErr);& Z' J+ V/ N# P; U& R) s  p& o) x
' _9 I  U0 T# c
        SysFreeString(topicStr);# ~2 A: d/ U; r+ e' [
        SysFreeString(itemStr);+ C' I* @4 ^2 r/ D# V
        SysFreeString(valueStr);1 o6 h) J2 {) ~( x+ r0 ^
5 {2 ~: }+ E3 s; D9 p5 G* `( k% m
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
  _" Q( F0 {1 c: ~* T此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????* t6 w6 ~/ E% t1 w# w; Q$ W

/ c9 B5 t) I" l1 B1 O  P7 g+ X1 B- f$ P0 Q( \# C) x
2.这是request的程序
0 v1 h; k; s- z/ t0 [//  Request a value from Extend
+ V! C, d( i+ v$ ]( k! o; v//( f# @: j% x- ~  }5 i% M" @
//        Initialize the variant that will hold the BSTR.  Set the variant's* ^2 A7 B7 T8 B1 [
//        type flag to indicate the fact that this variant holds a BSTR. Place the
& `$ \8 V! ]3 s( n; `8 t$ O//        BSTR into the variant structure.
; y! z+ j  q# s1 K% r
$ P* n7 Z1 W( v        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);) b4 H0 w7 a, X6 e( s) f
       
7 @& b4 G+ R  K         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
1 I% a8 i+ `! x  U: I- I+ _        VariantInit(&requestVariant[0]);
, w3 K% I" K# S: b        requestVariant[0].vt                 = VT_BSTR;
  A/ ?0 b% B# z        requestVariant[0].bstrVal         = itemStr;* s4 B( k7 t# ^) ^, L9 k6 r1 g4 k
$ g* x4 v/ f3 c; O: o
          topicStr                                         = SysAllocString((WCHAR *) L"system");
6 e4 I. n3 V9 o) z        VariantInit(&requestVariant[1]); : k- f8 h" d9 y6 G0 ?
        requestVariant[1].vt                 = VT_BSTR;7 a/ `% U7 ?+ K, y& t
        requestVariant[1].bstrVal         = topicStr;
/ C, W+ z- B9 J4 D% b# @
4 Y5 E; S+ T8 _7 p. o//        Set the DISPPARAMS structure that holds the variant.
. M8 C- x2 L0 K9 y' E3 b7 D1 p6 ^# c3 d  |9 c
        dp2.rgvarg                                         = requestVariant;
6 O6 Y5 {; ]# D9 F- x  E        dp2.cArgs                                         = 2;8 P, h5 `* o, Y8 E0 _
        dp2.rgdispidNamedArgs                 = NULL;2 D, o& f; V* Q6 `$ G" q% t6 k
        dp2.cNamedArgs                                 = 0;
( x6 r* H: v: z- E& n! a0 ?7 v% j, }! u# r) t) X
        var.vt = VT_EMPTY;
' j3 ~6 O6 C3 ?: s3 O0 {4 C$ ^, M& e2 S9 U( {
//        Call IDispatch::Invoke()
6 ]3 A: H9 }! i4 P; B' ]/ p8 v/ l& p4 k- k& j& s2 |
        hr = m_pDisp->Invoke(
+ ?( ]4 ?1 z: X* k1 R) U. \                requestID,' x2 R  t9 D/ i8 r9 Q
                IID_NULL,0 C1 i# r8 r! ?+ W
                LOCALE_SYSTEM_DEFAULT,' q+ y" @5 N7 L& h3 N! k" Q
                DISPATCH_METHOD,
* @9 P6 d0 ?1 ?" X+ ~% `                &dp2,, A$ [; V. ~* Z: w6 v/ M
                &var,
6 I; F) ]/ ]' S2 W7 _) A                &ei,
4 f- A! f) \9 a; O3 I                &uiErr);! l& \/ z; W2 D
8 e' E/ q% e5 _. S  i  [3 n
        SysFreeString(topicStr);
( x; Q; y1 S2 D1 E2 H        SysFreeString(itemStr);2 I5 z# t1 U0 }* y, t. {- V9 P6 B$ k0 {
请问该程序是获得extend里面的哪个值?. o! Q. r, c/ F. B  e2 @# {+ O. R1 X% W
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-3-21 12:08 , Processed in 0.015028 second(s), 13 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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