设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12943|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:# x5 n+ p0 F  r4 N
Name = (WCHAR *) L"Poke";. C0 P; U8 D$ a4 I- g
                 " s; i, o- j% o2 ]
        hr = m_pDisp->GetIDsOfNames (8 W) I' Y0 |/ q$ w3 Q6 |0 K
                IID_NULL,                                // reserved
" u  Y; P+ ^. o) O1 a                &Name,                                        // Array of names to get IDs for; L8 F( |( F1 S
                1,                                        // # of names in the array
3 S/ O; x7 v0 i# o: Q' s% |: }: g                LOCALE_SYSTEM_DEFAULT,        // System locale
8 K' m) t! F& H  q5 C) K                &pokeID);                                // Array of IDs to fill on output  L7 J0 L, ~9 o
                       
4 w5 k" i! R1 v! |. s" F; \        if (hr)! F" g4 u& p* r- c3 |" y) ~
                {; b; H) K' a+ W" B
                MessageBox ("Get Poke Unsuccessful");) }1 r6 O- Q/ n  a
                return;2 L* p; K9 S+ z% r0 @- \
                }! b8 S: W2 z/ P+ o0 V0 X7 F
# y/ `5 a" k7 v* x" b
/**************************传递数据给extend**************************************/3 b8 G: J8 M% u* Q( U8 N
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);* X, n3 g6 X: j% {0 j, T$ D
        , \9 z6 i9 d% J+ r/ z" j) c
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
+ _$ _, K& H. s9 ]; B, H& _' x* }        VariantInit(&pokeVariant[0]); ; B' H% t" F; C6 w& j. [$ s3 Y
        pokeVariant[0].vt                 = VT_BSTR;
- Y; L- s7 D8 L5 e, P% j3 [: O" ?        pokeVariant[0].bstrVal         = valueStr;
) ], t9 r1 K/ O# `# C% i% ^; a6 M2 n* f7 E. T
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");3 H, W# p% b9 S$ J
        VariantInit(&pokeVariant[1]);
) q$ n; d5 @2 l$ b# \8 b( b        pokeVariant[1].vt                 = VT_BSTR;0 i# ?' h% s7 N- B! U0 q! k
        pokeVariant[1].bstrVal         = itemStr;
1 L8 k% [1 L+ G( W9 H
6 x) Q$ {+ h* _3 y( U          topicStr                                 = SysAllocString((WCHAR *) L"system");
4 ~7 I" M$ o6 N4 K  J$ d        VariantInit(&pokeVariant[2]); 0 r1 v5 l9 d' L9 x) K
        pokeVariant[2].vt                 = VT_BSTR;% X6 \: [, {6 y" E7 z
        pokeVariant[2].bstrVal         = topicStr;
4 a  |9 n* b# t5 i/ h# o( D1 N7 c: o( z/ x" ^& J! z& L
//        Set the DISPPARAMS structure that holds the variant.6 R7 K1 m4 H% G  r2 ?& [& e$ o& O* T

* p2 v4 E& {  _: z, t: h        dp.rgvarg                                         = pokeVariant;0 }7 C# J1 P4 a& |5 U
        dp.cArgs                                         = 3;
+ @; v9 {/ o1 w# r        dp.rgdispidNamedArgs                 = NULL;) z/ K7 X: i2 t; |
        dp.cNamedArgs                                 = 0;
+ Q. l; B  m4 g) Z/ C1 G. f& c
+ O0 E8 e3 \3 D4 X//        Call IDispatch::Invoke()6 {$ b4 N9 y9 D2 D
( y1 ]( [+ F% p
        hr = m_pDisp->Invoke(
/ V7 z& Z7 T+ g- w                pokeID,
& @: ?% v- g; K                IID_NULL,) Y$ P5 n# J1 v' y
                LOCALE_SYSTEM_DEFAULT,
! L# A5 H! z7 ?' L9 G# J                DISPATCH_METHOD,
5 c  t1 x) J, n" H- L( {                &dp,
1 `* X- g# r. Y. ^! s& M4 y6 G                NULL,1 x# Z* T7 R1 E5 {$ v" i
                &ei,2 v( h7 G1 O/ {" h- q
                &uiErr);
4 o2 e& q! K  X1 x/ L" u
7 v: u# d$ J6 p4 E. p/ q) t        SysFreeString(topicStr);
5 W( y. k" x* _5 |6 |0 ^        SysFreeString(itemStr);4 ]" R" }8 C2 y" ]
        SysFreeString(valueStr);) Y- X8 }' l' a5 w: J7 ~2 @
% K6 U/ N$ E( V) h8 A5 I
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
4 r$ C) d1 Z7 X$ q此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
2 q8 G7 d# k2 S
3 m- O$ L+ O+ d2 U$ f
  s( D0 S* Z* x* V2.这是request的程序' J( T+ Z8 X: S2 d% ?
//  Request a value from Extend
3 t8 _% |* t8 i- q& b//
9 O7 E5 C) v. g! k8 u4 v: ~//        Initialize the variant that will hold the BSTR.  Set the variant's
) w9 N1 W; A, T: C0 `" C//        type flag to indicate the fact that this variant holds a BSTR. Place the
$ C- B7 @# f) Q& k/ I& R$ f; b//        BSTR into the variant structure.
- o$ V& y( U7 ^1 E9 d  l
3 g6 R/ Z. u& I6 |9 ]        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
# P* s9 H! Z3 J        * [& C" b& C+ s. ?
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
  z6 V6 i7 a- V; ~, {' K* h& _        VariantInit(&requestVariant[0]); 8 ?6 I7 {) n( Z; m' m* ~  W
        requestVariant[0].vt                 = VT_BSTR;
; A/ P( W' c8 W: R( {3 M: v        requestVariant[0].bstrVal         = itemStr;. o& f' b$ t* x2 I' t; H: g
3 A# [+ _  o" ]8 S- f  {
          topicStr                                         = SysAllocString((WCHAR *) L"system");; N6 V! h) H" n. c# e! F* [
        VariantInit(&requestVariant[1]);
" E. l, y$ `/ }. m) k7 o        requestVariant[1].vt                 = VT_BSTR;
, Y" c- {/ A, U: ]! ~+ l        requestVariant[1].bstrVal         = topicStr;+ v- G, `; ?6 v3 L% G
9 g& E6 ]/ M( X
//        Set the DISPPARAMS structure that holds the variant./ d& B- b! d) m* C1 V5 H
2 w' Y5 p" z" g* H9 ]% K
        dp2.rgvarg                                         = requestVariant;' ?, I. m' Z3 ^9 z/ g/ b4 k0 E  i
        dp2.cArgs                                         = 2;4 {( y: Q6 v( I, I$ _' q
        dp2.rgdispidNamedArgs                 = NULL;' ]4 w0 i- {( X( F
        dp2.cNamedArgs                                 = 0;
' M8 r5 J- n; r. r# K9 N, ~" x% V6 h
        var.vt = VT_EMPTY;" j& E/ {& n/ h# x. b$ k0 L+ z: p8 N' C

* f$ q' C2 V) n# Y, ]3 b//        Call IDispatch::Invoke(), D6 S6 H. n* u
; A9 f7 O& Q/ s$ q/ O
        hr = m_pDisp->Invoke(4 M% z, h: {6 b( P
                requestID,* z* y' U  w$ O" e$ {' J' S( e+ @
                IID_NULL,
1 m& L( P+ l- z" \& `* v% O: K                LOCALE_SYSTEM_DEFAULT,7 R! b# |9 U' ~6 [
                DISPATCH_METHOD,
4 G: P6 L; Y& h' ^; ~+ l& U: g3 x& a                &dp2,* t2 U; V7 `" w2 E$ |  B2 J
                &var,
) j2 k0 A% J6 O5 a( q& m: H" c                &ei,8 O: _; I8 W6 D8 ?$ P# ]
                &uiErr);! J8 n; b2 a6 N& a8 B0 _7 }

# w  K( F' s. Q, P1 a1 @+ D) Y        SysFreeString(topicStr);  O% J# K& \/ a% h4 O0 B; L4 h
        SysFreeString(itemStr);* J3 C+ a2 ~" k
请问该程序是获得extend里面的哪个值?# B- Q& ]( M$ S. b# l, a
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-9-5 13:22 , Processed in 0.013996 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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