设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6860|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
6 J8 y- H9 D3 c$ lName = (WCHAR *) L"Poke";
7 s2 u5 @& y" w( J/ Y* I                
3 V% o0 c& h) I' k& X) M- I9 I; S        hr = m_pDisp->GetIDsOfNames (
; c# m2 E+ l# {  {7 @1 G. N% b                IID_NULL,                                // reserved/ _  `9 B! k( \0 T
                &Name,                                        // Array of names to get IDs for
* O: x  W, J# V; \3 b$ D$ p) q- ?9 y                1,                                        // # of names in the array8 Q3 ]0 G5 K7 F' t/ O# z3 L2 z+ M
                LOCALE_SYSTEM_DEFAULT,        // System locale
% k) j8 @* t( d/ w& b                &pokeID);                                // Array of IDs to fill on output
+ B; H4 |6 U1 k7 H0 q. ^( N+ Q2 N. X                        6 `1 ]" W$ t6 ^# v* z" M4 f; b
        if (hr)3 E5 F& A* ~4 @- M$ Z6 V, H; M
                {
" @5 A8 {6 D9 J. |: V& y                MessageBox ("Get Poke Unsuccessful");
# p8 @3 M  U# ]# }7 K/ P                return;6 o/ C$ B1 d+ U! a4 p) b, V8 F# Z
                }; s4 v( I/ R" J6 L. f

8 V- T6 ]; J" i4 B/**************************传递数据给extend**************************************/
: d9 ?; C5 l3 o- }: w+ S        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
0 C6 [% P' x$ s  n- E       
, J5 a; D8 Y! Z1 Y2 V7 Z! y         valueStr                                 = SysAllocString((WCHAR *) L"1232");
% q4 o, t- n' a& r- u        VariantInit(&pokeVariant[0]); / p1 m/ n$ y1 D8 a
        pokeVariant[0].vt                 = VT_BSTR;
0 G( Z1 G& z: t! N8 V/ m. g        pokeVariant[0].bstrVal         = valueStr;+ s7 `: ^) P6 q

- |1 Y' b$ r9 R" M# g& ~9 z         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
' ]: R& U( Y, G" @9 T9 V        VariantInit(&pokeVariant[1]); 6 K, u8 U! R2 M- S& N
        pokeVariant[1].vt                 = VT_BSTR;
7 _7 `3 z& B" W5 b        pokeVariant[1].bstrVal         = itemStr;
& F# C  G6 M5 I4 H: x+ g  m6 B7 l  j3 K- ?0 U+ f5 @/ Z* o
          topicStr                                 = SysAllocString((WCHAR *) L"system");, Z9 E  ^( H% s
        VariantInit(&pokeVariant[2]);
: Z& T' `0 r) ^# \2 G* n        pokeVariant[2].vt                 = VT_BSTR;$ [4 S' I. v& z, o/ W6 W
        pokeVariant[2].bstrVal         = topicStr;
3 H( O& Y/ m9 }
4 E$ A4 ~) N. c2 F//        Set the DISPPARAMS structure that holds the variant.* V* V$ [9 D& r4 _7 Z

' f1 Z' y% U. \        dp.rgvarg                                         = pokeVariant;
0 |( c; P% p* d+ u        dp.cArgs                                         = 3;
- i! q) }6 k$ Y* y0 a* @( Y        dp.rgdispidNamedArgs                 = NULL;
5 u$ P4 P( A$ O2 e) V0 }        dp.cNamedArgs                                 = 0;
6 W% Y6 m# E; S% a& ~% Z% V; n) V- q! H9 s+ t
//        Call IDispatch::Invoke()/ `# w  G7 W  \3 B

, j) O& f- a7 ^/ w9 z3 E' N. w        hr = m_pDisp->Invoke(1 v5 E, y2 D3 x5 m
                pokeID,+ l6 k0 B0 ^! B( i2 M; G4 p
                IID_NULL,6 d( u# I- m6 P7 y
                LOCALE_SYSTEM_DEFAULT,) r6 L1 u% T8 {; F% h3 J
                DISPATCH_METHOD,
6 t" w& u, E1 x& m+ A+ z                &dp,
0 w( O' i0 @) c, s- h+ c0 B                NULL,
  g6 x& u4 L# x! ]$ w                &ei,! ]3 w/ {: f% t! W, m, I. _% q
                &uiErr);/ M* B+ ^2 V. E* H4 I3 u' ]
- t9 H. s" ^8 P1 L8 X" @
        SysFreeString(topicStr);
8 w! F; m4 b+ C9 j" {        SysFreeString(itemStr);
2 z5 Q* g8 t" B5 \' G        SysFreeString(valueStr);
7 |; t" Q  j# `& r' h$ {& O3 `: p! G* R% ]/ O
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
1 j5 g. K$ T7 ^. k( S此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????6 C% C) X4 O" i6 H" z1 i

7 o* d4 J! K9 [
8 G) P; ~" Y4 b! U+ t( @9 U2.这是request的程序: [6 p+ z% {: x# P1 B
//  Request a value from Extend
* w! a; U: q' Q7 h9 P//
$ Y! U9 m0 I( n//        Initialize the variant that will hold the BSTR.  Set the variant's
0 e6 t0 t, V( j2 Z* `//        type flag to indicate the fact that this variant holds a BSTR. Place the9 z, @' D( H6 D$ d* L
//        BSTR into the variant structure.
5 B% x, ]- U( b. {8 O6 w$ ]  _
$ m( u& I& D* e; d" j) `        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
/ ]! K3 I' b) D! X' ^/ p; C; N' H1 j          k# n8 m  w6 E' X( s/ I6 d
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
" S: R' M0 b- b+ w. ^7 h) m        VariantInit(&requestVariant[0]);
0 y4 F( f% S$ [9 v        requestVariant[0].vt                 = VT_BSTR;1 v* c: c5 Z. @! q( H2 d
        requestVariant[0].bstrVal         = itemStr;1 ]0 Q0 x+ T: G

/ \, n1 M4 F/ g; J% |. n, }          topicStr                                         = SysAllocString((WCHAR *) L"system");: k& r5 V, @" g; p
        VariantInit(&requestVariant[1]);
# i! O6 n; o2 q  W        requestVariant[1].vt                 = VT_BSTR;9 Q- c( m9 ^2 p2 o( p, z
        requestVariant[1].bstrVal         = topicStr;
" n% N0 {" I. J. x; J* r. v
# ^) |/ _' [& [) u( N//        Set the DISPPARAMS structure that holds the variant.2 L0 w0 }% H8 |5 N3 d

+ N- W3 R4 F5 L! Z, B% @        dp2.rgvarg                                         = requestVariant;
1 L* U/ V) Y! W2 R4 l7 [        dp2.cArgs                                         = 2;
+ f: n1 c4 u* ]9 [# }        dp2.rgdispidNamedArgs                 = NULL;
7 {( O6 k# l. j+ n7 T$ L& Q        dp2.cNamedArgs                                 = 0;- a3 B: I/ Y9 F9 L1 a3 O6 \' N
. E0 |3 ?! j2 i3 j) n3 M: V+ h
        var.vt = VT_EMPTY;
9 G0 O5 Z8 T  Y1 ]5 @' K& N
5 h9 E( x4 t/ b  j" d//        Call IDispatch::Invoke()$ C3 ]) Y  a" ~# ^3 Q* W

$ [9 `! d) E$ v7 w9 q        hr = m_pDisp->Invoke($ ?1 g3 ]$ h* E0 ^
                requestID,
8 R$ d/ R# F! a) X' t( s                IID_NULL,
: c1 a2 H& u) w) {                LOCALE_SYSTEM_DEFAULT,
5 }; Y$ S4 Z! t& v9 d9 K" a                DISPATCH_METHOD,
! K0 k3 z0 A/ `# A                &dp2,2 x2 Y3 H4 V7 }5 C2 U
                &var,
8 V7 }+ f  J1 A                &ei,/ ^/ @- l  u  n9 T' Q$ P
                &uiErr);
6 c, s, R8 S3 U, @4 G0 ]
7 a5 k5 ]5 F2 D# o7 B        SysFreeString(topicStr);
  K2 r$ }0 x+ ~: @: ^: X- K        SysFreeString(itemStr);& T& A& h* J0 S/ R( n4 H& L
请问该程序是获得extend里面的哪个值?
. E# r& a1 c% z" f如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2025-12-9 13:50 , Processed in 0.016800 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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