设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8915|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
9 D. f* v% M8 m+ pName = (WCHAR *) L"Poke";% ?* T: O9 ~) r
                
& d# ?4 D: j, d        hr = m_pDisp->GetIDsOfNames (% K6 s. q. L  Y$ z
                IID_NULL,                                // reserved
8 s  O. W7 X% ~- G; H$ I                &Name,                                        // Array of names to get IDs for5 u6 n' [2 a. P, A$ O6 M* P6 x- B
                1,                                        // # of names in the array& [: o' x1 q' f& ?. c/ x
                LOCALE_SYSTEM_DEFAULT,        // System locale
0 w. V4 p: x9 I' s  L# [# Y                &pokeID);                                // Array of IDs to fill on output6 Z& k. X1 P+ v* }$ o0 O, P
                        7 o1 U+ k: R) F1 q7 B2 w
        if (hr)
; ]  A5 F) O- Z; n0 e. J7 h/ d                {6 K; h. Q; B" \% D4 R" ~' e/ D
                MessageBox ("Get Poke Unsuccessful");/ y1 m4 s  n7 j5 F
                return;5 x8 t, Q: k# \$ E' l% X
                }7 w3 p) w; `/ F

' {& p5 v+ e1 ?3 h' Y0 ^/**************************传递数据给extend**************************************/! s' ~4 y' o- o- e* l
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);, y2 j. a7 E1 }; t% e
       
( ^  @4 p3 N8 V, p) t& g         valueStr                                 = SysAllocString((WCHAR *) L"1232");/ V# H% s1 n+ Q4 f7 C# C, i
        VariantInit(&pokeVariant[0]);
9 t6 T3 ?9 \6 ]1 l: V' A2 Z# X. _3 k        pokeVariant[0].vt                 = VT_BSTR;
* X$ g1 V6 x( O0 j% d, Q9 X; D        pokeVariant[0].bstrVal         = valueStr;
4 f8 d) o  O0 b
( H9 t4 R1 C& K" T         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
1 X6 S# z' {$ f; a        VariantInit(&pokeVariant[1]); 8 j# e% M! n/ e% `! G6 l
        pokeVariant[1].vt                 = VT_BSTR;9 B/ U# _8 G& b. d
        pokeVariant[1].bstrVal         = itemStr;- y3 \1 P% q2 z: B0 O

% ^; l/ \: D% Q5 p/ e          topicStr                                 = SysAllocString((WCHAR *) L"system");+ L% ^( K8 f& C1 T9 j' N
        VariantInit(&pokeVariant[2]);
2 ^$ `: o6 M8 Z( \' V  h4 Q  _: \7 S        pokeVariant[2].vt                 = VT_BSTR;
) j: |: _# Y$ F9 d* b6 Y        pokeVariant[2].bstrVal         = topicStr;
# p2 v& s0 ?9 I! ]9 d8 r
7 m6 `& h- f) q; K0 i6 k% [//        Set the DISPPARAMS structure that holds the variant.4 k3 ~8 x; x% ~( Z! E$ G$ A
- Z* H0 A, N0 Y* l
        dp.rgvarg                                         = pokeVariant;
8 Y7 T4 i* E# g) }, V        dp.cArgs                                         = 3;" e: G) l7 [8 k$ H1 e$ @
        dp.rgdispidNamedArgs                 = NULL;( R% `/ G  y) Y7 X" i9 Y, j
        dp.cNamedArgs                                 = 0;' g8 t. o; L  K& I' V& |9 s* q
; s* R8 m% c+ l
//        Call IDispatch::Invoke()" }" B' y8 z  o7 ~- h' p) w; t) v
* Q2 ]6 Q9 z, }9 \4 D! r1 a
        hr = m_pDisp->Invoke(8 W, m5 e! N- G, `; k. @& J
                pokeID,
* t8 \2 n- Y3 [                IID_NULL,
& g: S9 L0 D* ?6 j) H) S                LOCALE_SYSTEM_DEFAULT,; w. G, T9 X' ^5 I
                DISPATCH_METHOD,
/ u6 _3 M9 [0 H; }9 ^4 a+ y                &dp,
! M$ k# N" e) I" n4 @3 h1 t                NULL,
0 `" p3 `4 D, [$ P                &ei,
  \; |6 d3 V% q5 x5 k                &uiErr);# h, F0 N6 X( }7 E# b" P* z
3 d# l: k; l' ~
        SysFreeString(topicStr);+ I3 P! q0 ~: h. f, E1 p  l9 k
        SysFreeString(itemStr);
7 d7 q( X+ D/ w; @7 [        SysFreeString(valueStr);5 V8 K, {0 H1 d4 T" X
4 n2 E  i6 A" M. x; `- y
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
3 n0 @! E2 e& w' q7 B此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????: C6 [5 k9 I- y+ p
& I" @4 l+ n. S$ Z- m3 R: E) D. H
6 n5 {; W$ H9 B$ Y) f/ d* v. |) i
2.这是request的程序/ o% N+ y+ N) z* G* Q1 k
//  Request a value from Extend' Y3 l, f, J2 J
//+ g0 s* L* K0 v- [3 G
//        Initialize the variant that will hold the BSTR.  Set the variant's
9 o, _- X  x: u//        type flag to indicate the fact that this variant holds a BSTR. Place the! s# Z* L9 n6 m' S& d! e# e
//        BSTR into the variant structure.0 Q% _9 Q/ {6 r. h  S
- S) C% P! v4 W: `) s  }  I
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
! G" d/ d  h; }4 y        ' \8 }: i* o" t5 H$ T0 o& q" ~
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
1 j5 M# F5 k! `9 k9 c/ M        VariantInit(&requestVariant[0]);
( x4 V- \7 B7 W        requestVariant[0].vt                 = VT_BSTR;
6 x, [5 i4 Y" [  L        requestVariant[0].bstrVal         = itemStr;
9 [; D- t3 }2 L
1 n! o; f3 O$ Z" G* s5 C3 x4 c          topicStr                                         = SysAllocString((WCHAR *) L"system");
8 a! w' p2 s# m        VariantInit(&requestVariant[1]); ( x, q0 X& j. W; V% p; T6 |' s
        requestVariant[1].vt                 = VT_BSTR;$ S: M* l9 S7 ~# w- i$ K1 y
        requestVariant[1].bstrVal         = topicStr;7 G' x  y3 v* I
& ?8 {3 W, i0 G$ s* Q* Y& Z
//        Set the DISPPARAMS structure that holds the variant.
! {2 i) l' y  S0 u0 z9 F0 T3 C7 C$ D& J' M8 H
        dp2.rgvarg                                         = requestVariant;
6 t. I+ a% f% [, x        dp2.cArgs                                         = 2;/ b4 r/ C( `1 m3 v
        dp2.rgdispidNamedArgs                 = NULL;! y4 M6 S; }' h7 ~
        dp2.cNamedArgs                                 = 0;
' u+ R9 W8 |2 `) u2 N0 ^! H( B, g+ ?3 T- @9 Z
        var.vt = VT_EMPTY;* g6 K. P+ w& H; {  e* p9 A
) o0 w# y- F& D* Z1 ?
//        Call IDispatch::Invoke()3 w( L6 s; E' u3 d+ p
* }% g- U8 ]6 T" H6 i6 R% H
        hr = m_pDisp->Invoke(
% I: L" |2 m* m/ ?. W6 K7 x- Z                requestID,' C# J8 B1 u" Q/ D+ s4 Y
                IID_NULL,
5 e- a9 T0 ^% p, y5 t7 W& ~                LOCALE_SYSTEM_DEFAULT,, k: x! x5 k) j( R
                DISPATCH_METHOD,% c! X/ j4 @& h* |5 d( f: y
                &dp2,! Y+ B! B$ G9 p/ W2 Y
                &var,
9 T( x) T$ C: c+ @7 D6 q* a  G                &ei,
5 |3 [$ r" y5 n! h/ D' ?' U3 [                &uiErr);
- F4 _, \; K! T5 Z8 i* p9 l' J; m
        SysFreeString(topicStr);- F, x$ @+ X4 C8 P# |
        SysFreeString(itemStr);" m. y6 Z' j% m8 f2 R- I  @
请问该程序是获得extend里面的哪个值?$ q2 O  H4 \4 J% }+ N; V0 n1 k/ J
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-3-24 11:28 , Processed in 0.015827 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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