设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10040|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
' j# }; z9 S0 K/ l  K! kName = (WCHAR *) L"Poke";: o; m2 z1 j$ N9 b
                 ) D+ \& [* p' _7 b6 P9 F  q
        hr = m_pDisp->GetIDsOfNames (
% o% p9 {* b$ |) a& `                IID_NULL,                                // reserved
4 c. l) N2 ]( j' W8 V* {                &Name,                                        // Array of names to get IDs for
. j/ ^$ t0 q7 o- k, `' y/ ^; w                1,                                        // # of names in the array
( g$ f& |) Z. `, u$ u% N                LOCALE_SYSTEM_DEFAULT,        // System locale& n- Q! w) d8 S' F, }- u' s3 D
                &pokeID);                                // Array of IDs to fill on output9 j3 H6 j/ |& B. z2 Y/ z6 ?
                        ( y1 c5 V3 a; N; Y
        if (hr)' L3 F5 L: R% d0 c) a
                {) o8 u) X5 T. p/ O
                MessageBox ("Get Poke Unsuccessful");. B1 ~. }7 O3 o, U
                return;
% D& i, W' [- \, n1 n1 u                }
5 o, O5 \, ~' z- f  v" f- O; Q
3 s% X5 l( v2 }0 m, m/ S' _4 Q! S! \/**************************传递数据给extend**************************************/3 c0 s9 E- ?, v0 X0 Y1 i% |9 ?
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
" n9 q# j0 A$ b5 O+ F: x1 [5 ?0 J        9 C, G( c* M3 G% y  T5 Q9 P
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
3 v' b* b% u/ I* d* _0 e" M. Q) ^$ y: u        VariantInit(&pokeVariant[0]);
: Z, m$ v  j( K* ^* T: t        pokeVariant[0].vt                 = VT_BSTR;
- C, v5 k) P& Z% D        pokeVariant[0].bstrVal         = valueStr;- z' V8 ~, B8 N# ~
9 R& i: ^3 x8 Z2 E/ G
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
) \) _( `$ P* N( V) d! G5 Y% p0 D        VariantInit(&pokeVariant[1]);
- z* d* @+ \2 R3 Z5 p        pokeVariant[1].vt                 = VT_BSTR;
" ^. C/ _1 p& Q2 j9 I9 j' b5 @* `        pokeVariant[1].bstrVal         = itemStr;
1 _# u' O8 m/ f6 _- V) z. D# T4 r6 g1 W* t) _% N* K* U
          topicStr                                 = SysAllocString((WCHAR *) L"system");  Q8 ?. a4 C( h, s. P& U+ _) m: `
        VariantInit(&pokeVariant[2]);
0 V- `& ~( C2 T7 v( v' A7 K        pokeVariant[2].vt                 = VT_BSTR;
0 K! r- a7 w$ t# f" j* z1 z        pokeVariant[2].bstrVal         = topicStr;& ~2 G! i) w5 R5 X5 S5 q
, |% J2 k6 ^! Y5 [
//        Set the DISPPARAMS structure that holds the variant./ V1 R2 @" Z$ B0 ]# n. a. ]
. A1 f7 ~) m* t5 n$ w/ c) e3 u
        dp.rgvarg                                         = pokeVariant;2 q& r2 Y: q5 I9 K! x3 n
        dp.cArgs                                         = 3;
7 _8 D6 ]* W5 v3 c" |* J- e        dp.rgdispidNamedArgs                 = NULL;: a/ t0 v) M; |4 Y3 }
        dp.cNamedArgs                                 = 0;
. g9 a) ^6 ?. C' {, L9 D! l
8 _5 C# u$ y* L4 K8 _4 a//        Call IDispatch::Invoke()
! o4 D& a. _  {6 E1 e' u" R" j
. M* ?* F6 W! M        hr = m_pDisp->Invoke(  G) j2 `  @  D! o7 ]4 b
                pokeID,
7 N( B+ g- b, l$ [                IID_NULL,
) i, R. }0 x* e5 F8 a$ h& W                LOCALE_SYSTEM_DEFAULT,* a, R2 T7 T3 A
                DISPATCH_METHOD,8 A8 L* V; s8 O9 ?/ j
                &dp,
$ |( ^6 C/ S7 q5 I3 b. r                NULL,3 [! e" r$ ?& P7 v
                &ei,
3 y1 S7 M6 F% W                &uiErr);
4 V1 E: F7 ^: W; I# T8 c$ z3 F( s- Z+ z6 d9 v. W6 ]- z5 |
        SysFreeString(topicStr);# G' F) m: Q% _( ?
        SysFreeString(itemStr);( O9 M1 M- }' [! S
        SysFreeString(valueStr);0 v+ ]1 k3 M- M% V
% {$ K2 e' o( z& n3 W9 l( Z
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???" J' B! E  j8 I: I  H
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????" s' ~9 ]& d2 a8 E" |
* o. Y. ]& R1 W/ i; K5 h" i
0 o2 e- `4 r1 c% z7 R% P
2.这是request的程序
8 O- W- ^8 @' a: ~. ~  V; i//  Request a value from Extend
& k1 f6 q0 H0 ~) a8 c/ s//
$ P5 _, s0 B, q8 ?! d//        Initialize the variant that will hold the BSTR.  Set the variant's
9 k" H1 C' A" }" [$ r6 C! W//        type flag to indicate the fact that this variant holds a BSTR. Place the( b! i! O+ I# ]- D8 {7 c
//        BSTR into the variant structure.
/ S0 t" K, L: Q$ r' v
; A, @! a" [/ e/ k: C( A        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
& o* k: C( F/ F0 J9 g9 P        7 A2 M6 W& p' c( ^" u
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
7 p' }0 N# B% W- }5 W        VariantInit(&requestVariant[0]);
2 y4 A: F5 t( `' t0 k        requestVariant[0].vt                 = VT_BSTR;
3 B( A' q9 W+ F        requestVariant[0].bstrVal         = itemStr;
% [, Y& y& H. i6 b9 l
% ]5 l1 s- Z2 B, r9 s5 n+ e+ R" \          topicStr                                         = SysAllocString((WCHAR *) L"system");
7 {5 L/ Y4 Q; c3 q        VariantInit(&requestVariant[1]); 1 S2 ^" L9 P3 Y3 T2 I) r5 c
        requestVariant[1].vt                 = VT_BSTR;
: R" o$ a& ^; T" x( h. D6 J        requestVariant[1].bstrVal         = topicStr;
- F, w. b# p& t0 q; \4 U) v
+ Z  P. D$ I7 X$ f//        Set the DISPPARAMS structure that holds the variant.
& T3 n6 J" L8 H  N& m- I  Q5 E
* U$ L: Z3 ?9 g        dp2.rgvarg                                         = requestVariant;% }* w, o+ W# H( ~6 E# x
        dp2.cArgs                                         = 2;
) w6 n# C, X- T0 G# i8 F        dp2.rgdispidNamedArgs                 = NULL;, _8 T* K" A, S4 D) u& m8 ?
        dp2.cNamedArgs                                 = 0;4 J/ b, G: M0 T4 R, G
' U) G* D, t6 {6 [; |
        var.vt = VT_EMPTY;
/ J: z+ l# s( y2 S. S8 k) c/ E
7 P2 ?$ O- k1 s- }# n7 D//        Call IDispatch::Invoke(). |7 V/ ~, @6 v! a0 ?+ S5 O8 r% \5 ^

7 E! i' p+ Q; b7 d1 N% {3 O        hr = m_pDisp->Invoke(7 Y0 e9 ?- H+ t: Z, Z
                requestID,
4 s$ C( s: U, R$ Z! z8 N9 h                IID_NULL,
( g8 k! L7 V3 n                LOCALE_SYSTEM_DEFAULT,2 B) I" k) m% w8 p
                DISPATCH_METHOD,
6 T* h0 }3 g6 h. Q6 Z                &dp2,
; D" R, d3 ?- D6 D, G. f                &var,
) V1 |/ a! M2 K5 p                &ei,
& Z. `; `6 f+ y( s  I                &uiErr);
2 H5 n3 ?7 `6 O  m5 J) ]+ s' g: h" o
        SysFreeString(topicStr);7 v$ e. c; c: ^  u1 a/ ?
        SysFreeString(itemStr);2 j7 r1 |3 U6 d
请问该程序是获得extend里面的哪个值?, g4 f% b8 o, p0 Q5 D0 Z% J. B
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-10 07:09 , Processed in 0.020788 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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