设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10822|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:: T7 i) b) D) e. J2 q: h8 R
Name = (WCHAR *) L"Poke";3 U" K% C. L9 y! S  }" t9 D7 I& d
                
6 ^% l0 S' l  |, O) V        hr = m_pDisp->GetIDsOfNames (
+ x' b( k- W: U( ]- w                IID_NULL,                                // reserved
8 t& _, T; s" e, P; H) e                &Name,                                        // Array of names to get IDs for& h3 u2 s# O, {" k5 s* i
                1,                                        // # of names in the array( A2 w5 Z( \# B& w% `
                LOCALE_SYSTEM_DEFAULT,        // System locale# h" B1 s8 P$ i3 @+ b( h/ J
                &pokeID);                                // Array of IDs to fill on output; _9 P9 {# h7 i! m, G
                        , v4 ^* ~# Y6 r; N
        if (hr)
9 R% U# m. x7 {                {5 A3 g) F, \% p% ^
                MessageBox ("Get Poke Unsuccessful");
- b0 Y  Y+ L. \- e                return;
$ A, N) j3 U4 L! @5 M& s/ T& G                }
' K8 _$ \$ s8 L% Y" o' i% W, D2 f! f5 R/ x$ x6 Y
/**************************传递数据给extend**************************************/( H8 t8 S9 \4 D6 g
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);6 I$ c; O& K; i/ w2 U. S  [  {8 z
        4 s) G+ ?* w* c/ h& O: r1 b
        valueStr                                 = SysAllocString((WCHAR *) L"1232");8 C. D. Z% f! j9 \" ^, }
        VariantInit(&pokeVariant[0]); 2 l- w. a3 Q* ^: m3 ]0 S# @
        pokeVariant[0].vt                 = VT_BSTR;6 |3 Y! O  H6 E9 g% k# @) k
        pokeVariant[0].bstrVal         = valueStr;
+ r0 Y6 X2 F4 C4 C: e$ z2 W
5 K9 r# R; b$ K( ~9 V         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");+ I: p) b: R- b& |
        VariantInit(&pokeVariant[1]);
4 U5 O2 ]: R; h. M; r: B+ ~% F: X0 ]        pokeVariant[1].vt                 = VT_BSTR;
8 Q* C% }; @* D0 y, I        pokeVariant[1].bstrVal         = itemStr;  d2 B, Q+ M8 y! H
; Z8 _7 E9 y, z
          topicStr                                 = SysAllocString((WCHAR *) L"system");
& b1 v% s: ^. g, [6 Y, f0 {! E        VariantInit(&pokeVariant[2]); # D/ T& D* U$ ?
        pokeVariant[2].vt                 = VT_BSTR;
6 G1 P/ _, b' y* w        pokeVariant[2].bstrVal         = topicStr;0 ^3 q/ S6 @7 U) a4 Y, D7 J5 m( s

4 @/ O& Y% t+ J! x: d//        Set the DISPPARAMS structure that holds the variant.2 h3 E# O# T7 T8 e
8 l$ _+ k" Q; G2 m) x/ g) j
        dp.rgvarg                                         = pokeVariant;
( a1 p/ G7 J& {3 [8 M  d: O9 }9 ^        dp.cArgs                                         = 3;9 d* V" P" {+ K; R
        dp.rgdispidNamedArgs                 = NULL;
9 v6 r2 f8 N) t1 N9 G3 Y        dp.cNamedArgs                                 = 0;' t0 z# y+ p/ x! ~! h8 W0 f, M, F

5 f3 Z  ~% u% h//        Call IDispatch::Invoke()+ x/ l% Q& N2 i8 b7 |/ d! ~8 r

) K2 b: n! u8 O. p1 |8 y        hr = m_pDisp->Invoke(! S* H' |. O$ h. I
                pokeID,6 ]: F8 q' x4 @6 P: A
                IID_NULL,
- X+ L0 K# ]6 ?                LOCALE_SYSTEM_DEFAULT,: Y$ P7 w) G0 ^* R6 u
                DISPATCH_METHOD,
# G+ F' |0 F" w/ `0 O1 A' H( k                &dp,
; w( c) F* {' s; d0 D$ r                NULL,
9 n* f, ^4 d7 b; f0 N                &ei,* y) B' h& t& V! ^; U% I0 G
                &uiErr);
6 ], B6 w$ N: I9 Q
) `" H* m2 |- ]" ]# H3 n        SysFreeString(topicStr);# Y# H* g. U) L4 R; ^; F2 R
        SysFreeString(itemStr);
0 m5 J3 g% K/ @6 r        SysFreeString(valueStr);% t1 ^9 C! X7 S! K8 U; J2 p) a

1 ?7 R/ _9 a' @+ P; L, A$ R现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
. \9 o! _9 X' C' |8 M' n此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
) K$ T: `  a* y4 a$ Y- S( I1 u: Q4 L8 g2 q' c/ V4 a+ o( r2 M
5 O" W' [, o. i. d& {/ ?9 Y
2.这是request的程序
5 H( G7 Q3 z, T* x//  Request a value from Extend6 W+ t8 n; e5 q+ d: s: m9 B
//
3 ?- ^9 t5 r$ n% D0 E//        Initialize the variant that will hold the BSTR.  Set the variant's
3 {; R# u/ `* c, a//        type flag to indicate the fact that this variant holds a BSTR. Place the  T+ `( y! o8 U2 |% G- u4 w2 B
//        BSTR into the variant structure.
* \- C9 v1 v  _1 \
8 K! A* D6 @  Z  D4 s1 h        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
3 D# E& Z# _4 @7 l& v# y4 a* v        9 ~$ d- W$ t- e" D+ h3 c
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
( y9 y- T. K; m  c3 l0 B        VariantInit(&requestVariant[0]); ! H* P! [/ W9 k2 m' ~! ?* k- x
        requestVariant[0].vt                 = VT_BSTR;
- b+ n4 [( o0 s, ?        requestVariant[0].bstrVal         = itemStr;
" |; W0 U) ?* L4 v  P
# u. a: t6 w) \( x2 R          topicStr                                         = SysAllocString((WCHAR *) L"system");
2 p. D- `9 W$ V( j" P        VariantInit(&requestVariant[1]); 8 R% R. @) T/ o
        requestVariant[1].vt                 = VT_BSTR;" J; G- Q' }; n; |6 q* O0 j
        requestVariant[1].bstrVal         = topicStr;' F9 ]) y9 y$ @1 z; w; [0 X

3 ^# ?. \2 h; p: i) k. s//        Set the DISPPARAMS structure that holds the variant.. S: \7 z3 \% L) R+ I
, |# T" D, e4 N. X9 R
        dp2.rgvarg                                         = requestVariant;
( d% H+ x9 v+ _% d$ |& w        dp2.cArgs                                         = 2;
0 o7 S2 {! X- I2 Y& i. w        dp2.rgdispidNamedArgs                 = NULL;
4 y# r3 \  X' G; K        dp2.cNamedArgs                                 = 0;
% B; C, l) H( E0 R$ h# Y; Q' ~5 m3 r. R( ~
        var.vt = VT_EMPTY;4 f( m! Y6 s# V7 E: m

5 _; o' {: L5 }$ U# v5 T3 H//        Call IDispatch::Invoke()/ n. _" z3 c. u, @1 p: u. M2 L
8 ]: U6 F' R% U/ V) N
        hr = m_pDisp->Invoke(5 Z- K# _4 h' b2 ?0 Q
                requestID,3 a9 F" f, E5 ~& S8 F) |
                IID_NULL,
. Q* T: G0 }! p& j  w4 ~9 S7 ^                LOCALE_SYSTEM_DEFAULT,
/ M4 D1 ?* K, m, R6 }1 A' T& E                DISPATCH_METHOD,' ^$ F" U2 p6 v3 J5 Q5 V
                &dp2,
8 Z& i' K! X6 E                &var,
; w+ {' S6 X; h2 Z& s8 p+ P                &ei,4 k+ l5 \& w# F/ G$ O* u5 t2 T5 m
                &uiErr);
, p" {1 G  k2 `9 b
2 k1 \# j) z5 U( E9 [) y        SysFreeString(topicStr);) Y! m# i% F' @! J# c. \
        SysFreeString(itemStr);
& _" M) w7 v  x6 m9 F: s8 ~请问该程序是获得extend里面的哪个值?
9 J! B, k& Q7 {* @如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-14 12:41 , Processed in 0.017379 second(s), 13 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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