设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10855|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:( P' q: w6 W6 r! {
Name = (WCHAR *) L"Poke";5 y& S4 s5 b; s
                
3 y9 z; P1 Q0 j" t        hr = m_pDisp->GetIDsOfNames (7 d3 p# ^  U# a# t* N- b% I
                IID_NULL,                                // reserved
  ?" Z+ j) R: p  I, P# S                &Name,                                        // Array of names to get IDs for
" Y7 h8 z, Y& H6 C1 K                1,                                        // # of names in the array# Z- w) F5 c5 b# Q* [  G
                LOCALE_SYSTEM_DEFAULT,        // System locale
$ N, z* {. P' r. ~% o  a  U                &pokeID);                                // Array of IDs to fill on output+ Q/ _. ~2 m$ ^3 `! d
                        + m" |2 {- v( w; H. l$ M
        if (hr)3 z+ [1 g/ U( ^, v) B
                {
7 J6 W, p5 T5 O' D; t5 n7 T                MessageBox ("Get Poke Unsuccessful");. A' W& N0 B. r) }7 b
                return;
. a/ @( v$ m/ L                }1 L! J6 |8 E7 V) L) o

2 K9 T0 j% }  l/ Z3 t/**************************传递数据给extend**************************************/
7 C6 M" u& X6 L) I6 G        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);& H5 Y( D$ h' Z% W: u+ N6 s; O" A
        6 c" G, u$ B2 a, E) r/ }- N
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
# t, H7 L* E4 v) e& \        VariantInit(&pokeVariant[0]);
0 h3 B! E" `, G! _5 s$ D        pokeVariant[0].vt                 = VT_BSTR;; e+ S0 a1 h& Q
        pokeVariant[0].bstrVal         = valueStr;
  g  `0 |) ~+ E( x9 J2 z' f8 T1 q( l
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");, f& F) E% q8 g' V4 K$ W1 {
        VariantInit(&pokeVariant[1]);
9 G, v! P) ]! S& m; ^        pokeVariant[1].vt                 = VT_BSTR;
: i6 w* p) f# K/ U. M, ]* Y' W* i        pokeVariant[1].bstrVal         = itemStr;
9 l9 r* f, r$ m. Z- ^. u) [5 t. R$ n8 a" M, K. O
          topicStr                                 = SysAllocString((WCHAR *) L"system");: B9 K; m/ B% K7 ?
        VariantInit(&pokeVariant[2]);
. Y( t6 w9 R/ F1 `! @, y        pokeVariant[2].vt                 = VT_BSTR;
& w, |# z  w- k3 Z% G1 m        pokeVariant[2].bstrVal         = topicStr;
: e" W( p4 a( l: O7 ]: V
9 [' R) }' N8 B7 P. u0 |* j( a//        Set the DISPPARAMS structure that holds the variant." D7 z6 [  K, k- Q5 X! f

9 T3 \9 H' X9 z9 X6 [0 f        dp.rgvarg                                         = pokeVariant;
, a" o* O4 n8 q, P) T. j        dp.cArgs                                         = 3;
) @$ X  y6 t) L1 Z: `' R# {$ z- c' e        dp.rgdispidNamedArgs                 = NULL;
- ~' ]- g; }! `, [. ~. Z        dp.cNamedArgs                                 = 0;
) N/ I/ j1 K6 r" q8 I0 r' _! `, |) c0 H5 c
//        Call IDispatch::Invoke()
: |7 l: u# f) L/ O/ I2 t! p" R9 O" v, b3 q2 J( K7 }
        hr = m_pDisp->Invoke(# l0 O; p- o* J* n5 x3 V
                pokeID,
( m( A7 ~* q9 R                IID_NULL,6 N9 F# @5 f' F0 S
                LOCALE_SYSTEM_DEFAULT,5 Q+ H) `  ]: B! F% P, z0 |
                DISPATCH_METHOD,4 w+ N" b+ d; v- j1 H
                &dp,, @6 Y7 _/ A) E: ]  \  b& B$ [8 W# ]
                NULL,
* M% e: J9 \% o4 }$ X* j                &ei,
& C! q$ r" d* E- E( u/ L) r( ^                &uiErr);
$ m- h3 S: h" Y
9 a* M! B+ y, @, I, {3 g        SysFreeString(topicStr);
% j" I& ?5 j7 }5 ~+ R' c        SysFreeString(itemStr);
. v; r6 [) X2 l% T( O+ V        SysFreeString(valueStr);
+ j9 ?+ u( s3 ?  q! W) q0 s6 ~& V
/ n4 H! j6 B. W( }$ K现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
4 m3 X9 W4 \! q# _, |+ e2 f* S4 ]( x此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
4 w' p; w$ u4 z9 ~3 n6 w8 z
! Y' H* z7 }5 o1 U
+ e! g6 m" N4 E( g. z  ?2.这是request的程序
3 G7 z+ C* ^1 L2 {* V% H% P//  Request a value from Extend! {  Y( T  j. ]5 K  K9 }" S/ A
//, ?0 I7 G' E- ]7 a) ]
//        Initialize the variant that will hold the BSTR.  Set the variant's9 e! w( h/ z  A
//        type flag to indicate the fact that this variant holds a BSTR. Place the+ a3 p* `3 S) {0 w( X
//        BSTR into the variant structure.- F3 g7 A0 l; O

1 \* R- F* q5 T: N2 T' O4 m        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
- i+ z) C" c& ?$ Q. \        # M, p; x7 H, I) u
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");4 b3 [" T+ p/ O9 ]1 f
        VariantInit(&requestVariant[0]); : ^# Z% \  W( R  [2 F# |
        requestVariant[0].vt                 = VT_BSTR;8 Z! R; D* @, |3 q7 I% A0 d2 d  x
        requestVariant[0].bstrVal         = itemStr;3 Q" `0 ], Z! }7 j# @- `

+ v' M8 j% B7 ]) ]6 ?# x* X8 q* N          topicStr                                         = SysAllocString((WCHAR *) L"system");
+ C3 m" \4 C: [( W  ~        VariantInit(&requestVariant[1]);
+ n2 `# \( x/ u0 [% d  R# v+ l# W        requestVariant[1].vt                 = VT_BSTR;8 B% e2 |! s8 P
        requestVariant[1].bstrVal         = topicStr;0 p# {- F  x+ g* Z2 T' \
. i7 Q( m  }+ y+ Z
//        Set the DISPPARAMS structure that holds the variant.( x8 _- J7 C) I3 c; a# n1 w- w
9 e! {. U; C$ m  p: r0 V
        dp2.rgvarg                                         = requestVariant;2 t5 k! A0 M# h, C
        dp2.cArgs                                         = 2;
2 G# p; H8 k. r- B( @6 S% f        dp2.rgdispidNamedArgs                 = NULL;9 U( d1 B8 j& l  n$ G
        dp2.cNamedArgs                                 = 0;
  e9 R0 c6 [$ t4 w) c8 b, J2 J+ c* e9 @# N) R, m0 W
        var.vt = VT_EMPTY;. s# I2 G" [+ ~' D. @, F  h$ b
3 O, ]1 ]% r- J
//        Call IDispatch::Invoke()1 {! A' B1 w) P* e# M
3 j! N. g* c) j& L! Y
        hr = m_pDisp->Invoke(8 k0 P  {/ P1 k
                requestID," R( n" G' w& U$ {; r
                IID_NULL,0 Q& Q1 \& j' n7 c
                LOCALE_SYSTEM_DEFAULT,
( t0 [8 s  |6 j9 {0 L: l                DISPATCH_METHOD,
" @! p3 F- y6 D! G' X2 _) P                &dp2,
  ^' h& U9 B. @0 o# x: o3 L                &var,
/ H3 ]( k5 n: h. M& G& R% m' h' F                &ei,
$ x, S5 m! k, L3 w% m                &uiErr);1 W7 M/ {; e% d& T3 j5 k* A1 V0 ~

+ q+ p* q7 }" k* h; |. o. O        SysFreeString(topicStr);
: O% J2 N8 U7 q; u        SysFreeString(itemStr);
+ W2 D/ f+ m4 \" f请问该程序是获得extend里面的哪个值?! n* w7 e: o6 j" H$ E& a
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-15 20:10 , Processed in 0.011229 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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