设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8097|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
0 m. p. w( z" c2 Y- t7 CName = (WCHAR *) L"Poke";) U0 ^5 E% W. j8 k. A) p9 _
                
7 n* w( m2 o: ^4 V% @        hr = m_pDisp->GetIDsOfNames (
' _* ^* Z' r' G% w0 _2 r                IID_NULL,                                // reserved
4 i) J: P6 {, N) w2 q                &Name,                                        // Array of names to get IDs for
7 L0 C! I, P- a$ b# m6 q$ j) J1 V                1,                                        // # of names in the array
  v* o2 A5 S( w. z( k( q5 ]                LOCALE_SYSTEM_DEFAULT,        // System locale
' c0 C% G8 {: H                &pokeID);                                // Array of IDs to fill on output8 {$ q4 T( k- b  A5 ?
                       
# G( V" c% k& D; n2 e, a        if (hr)* b2 m7 P% A9 s# o: @
                {2 e5 S* S6 w1 y! q) t) }
                MessageBox ("Get Poke Unsuccessful");
! e  f( n% A) t                return;
# z0 U+ U. k* {& c( ]4 U2 L+ D                }" p( v- u: a* N* j

2 P) K& p0 ^3 B; Q) [. K- `/**************************传递数据给extend**************************************/* g4 P- o" j' l2 x$ y" f' q$ ]: x# V9 ]+ i
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);* x1 @% u, t$ c9 ?7 W! ?! q
       
) [2 Z! D1 I( f3 W         valueStr                                 = SysAllocString((WCHAR *) L"1232");+ m: j( [7 a6 g$ }
        VariantInit(&pokeVariant[0]);
& W% y& }: `7 E8 O" c7 w) w* X2 e        pokeVariant[0].vt                 = VT_BSTR;+ X% u+ u3 c3 g) j" w5 r# p
        pokeVariant[0].bstrVal         = valueStr;
1 r" u& }9 T, U2 a6 g7 n- t5 }! e7 n0 T
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
+ w  G6 ?4 r% f" R        VariantInit(&pokeVariant[1]);
8 f& m) [  e: L3 D        pokeVariant[1].vt                 = VT_BSTR;
# d! e' ?2 w3 q% [        pokeVariant[1].bstrVal         = itemStr;* `' E. X6 [/ Z5 ^4 P9 N; s5 X
. n: n0 Y9 `% f; h0 L5 C% L
          topicStr                                 = SysAllocString((WCHAR *) L"system");
0 J- o) H8 Y  Z5 f$ I" L        VariantInit(&pokeVariant[2]); , w  F% T7 I9 B! L( t7 i, O; t
        pokeVariant[2].vt                 = VT_BSTR;6 _7 P& G1 K9 C! |% R
        pokeVariant[2].bstrVal         = topicStr;
6 y( r9 U* {2 d* P; V" V3 x2 j- F+ D% S) E2 J% N7 p1 p
//        Set the DISPPARAMS structure that holds the variant.. r) R/ \! N* Q7 A

) j* D. g( q3 q. o        dp.rgvarg                                         = pokeVariant;
( O' D, _# U% l  A* h) t, Z( p        dp.cArgs                                         = 3;, Q6 E6 J" q) \% _4 U6 X5 C
        dp.rgdispidNamedArgs                 = NULL;
4 t# U6 z+ U3 n% T, x4 d  t  L        dp.cNamedArgs                                 = 0;- b0 D( l4 l* |+ g2 K* ~7 n

$ n! F1 V2 F( \- T( B//        Call IDispatch::Invoke()- q& h  |$ A  R+ [! _

2 W1 t. @" M' c3 E        hr = m_pDisp->Invoke(
1 ?, m1 h( U7 l6 Z5 @- A                pokeID,
' k" ?" s8 N) [: h  ]8 ^/ h                IID_NULL,$ w7 F5 M( j7 m4 m
                LOCALE_SYSTEM_DEFAULT," [% a1 E, X. H  k$ `3 }
                DISPATCH_METHOD,
6 X( h* r6 J" g: I. ]. G1 u                &dp,: ~9 s1 r! D6 S
                NULL,
! B, N: S9 g2 S8 \                &ei,5 a- z$ B4 ^6 G) F, a; M  [6 I
                &uiErr);2 }3 X) ?) q) d" i/ J. |

0 O& Y6 h) k: e& V" U% g        SysFreeString(topicStr);
" ?% z9 J; {+ C2 d        SysFreeString(itemStr);
, L  p( V2 J/ V' l( K4 v        SysFreeString(valueStr);% M5 n; b: Z" h% f  K+ u
# b; |* S* w8 s0 P$ Y+ u/ p$ e0 D8 q
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
% z+ w, x, w0 E& ]5 r此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????. a8 J2 }7 e$ e2 l9 |0 _

* y6 ]9 `0 ]! e4 v! M0 ~0 b0 h9 v+ I1 b1 B; K- g4 x
2.这是request的程序  ]6 r( ^: r' p& [3 [: |
//  Request a value from Extend
: I" a1 \3 v! L8 V# K3 q//
  E" y4 s  g% v5 r$ J8 }- `6 k//        Initialize the variant that will hold the BSTR.  Set the variant's
: x% n5 T& ~8 F8 b2 |7 A" F6 n//        type flag to indicate the fact that this variant holds a BSTR. Place the
' P) @8 s4 _" {//        BSTR into the variant structure.
; a* ?6 V' s- M4 k( T
0 J9 M7 J3 ?& {, y        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);) y' {0 O3 s3 ^2 Y4 n" G3 Z4 _
       
0 {3 Q8 B+ ]% k- ?         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");7 q9 x7 H& |0 n' c
        VariantInit(&requestVariant[0]); 4 [; o7 r9 w2 p' A) u
        requestVariant[0].vt                 = VT_BSTR;
: Y1 p7 ?4 n1 k# Q" H) w& Q0 X7 @( s        requestVariant[0].bstrVal         = itemStr;
/ P' Q6 {% P5 q* |6 J  Q. {' u: ?* z- Y) f! z/ v" u6 R8 J
          topicStr                                         = SysAllocString((WCHAR *) L"system");
/ R! e! ~% \* z- t& H7 [        VariantInit(&requestVariant[1]);
$ b$ a! Q! m+ h% N) H7 u7 x7 L        requestVariant[1].vt                 = VT_BSTR;! f# P* @) Q0 K- g2 k
        requestVariant[1].bstrVal         = topicStr;5 r" i! X1 ~# T& z1 J
' \" y, {3 M, e0 i; ?" z
//        Set the DISPPARAMS structure that holds the variant.
) o8 v6 Q9 Z/ E6 z* U" ^. H! C
, u) V5 n8 w8 Z. s7 p$ Z        dp2.rgvarg                                         = requestVariant;
9 U. j0 M: `- \        dp2.cArgs                                         = 2;
1 z3 L9 n" k1 T( K+ k0 i" [+ Z# [        dp2.rgdispidNamedArgs                 = NULL;
3 K* _6 A" m8 ]" d$ \8 ]        dp2.cNamedArgs                                 = 0;
8 M6 _5 v2 Q' I! L7 k2 C/ @( \: q7 I7 X2 j4 [% F  E, s
        var.vt = VT_EMPTY;
4 c8 a- _: F* h! i# Y0 {4 @8 Y
( }0 [, b; W7 S; j//        Call IDispatch::Invoke()" I' I" t8 C( q
3 b2 i6 ^4 m7 E0 M( R. v) Y3 L
        hr = m_pDisp->Invoke(, q% P; j7 X6 g( C7 m! B& N% Q
                requestID,
7 J% d8 S2 O9 J7 B# w9 |                IID_NULL,8 Q& ]8 L5 ]0 E: \0 ^7 K
                LOCALE_SYSTEM_DEFAULT,- i: L: d& _6 ^7 j
                DISPATCH_METHOD,2 j5 y5 ^8 i$ T% I% i) A
                &dp2,
8 T  c+ R, X: \3 g( M) _                &var,
4 V- v; H* a9 v/ s4 i$ ]                &ei,+ t% Q1 S; O: L- U
                &uiErr);
$ S/ d; [% c& n) C& A0 t3 p
3 Q7 P  a# V' n        SysFreeString(topicStr);  ^3 D$ k0 y7 H$ P3 R% d
        SysFreeString(itemStr);9 F' i& t- j' D% {( x+ V
请问该程序是获得extend里面的哪个值?
( a2 h+ l4 G0 u- W# z& r如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-2-14 17:24 , Processed in 0.013777 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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