设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11542|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:8 c/ @, n! q) |2 I! n
Name = (WCHAR *) L"Poke";
3 N( A# C; k- x- q( t5 h2 R. `4 K                 ' ?8 x" o# s/ E( h+ T
        hr = m_pDisp->GetIDsOfNames (  v" n) q- G+ |. G- H, ?
                IID_NULL,                                // reserved/ G& n8 F4 `, X: P
                &Name,                                        // Array of names to get IDs for
; f4 j8 a4 v9 {$ i" M% E$ u                1,                                        // # of names in the array6 P) k. _3 ^; J( z8 k7 L# V* Q, ]$ p3 o
                LOCALE_SYSTEM_DEFAULT,        // System locale8 Z' d8 d9 h1 r" |$ w% q; n
                &pokeID);                                // Array of IDs to fill on output
) N  k2 [- L  x0 H7 R6 A3 ?                       
( i+ a7 Y! m% d  q: I        if (hr)
# ~) B/ s3 {$ A+ }7 B8 N/ o                {, X( b$ h8 t- X+ R# b
                MessageBox ("Get Poke Unsuccessful");
0 l5 {# ?( o! p2 g+ t                return;' Q% x2 P( A9 h* x7 u/ h
                }  g5 o  E6 G3 i& u9 Y. d/ W/ q6 G
+ k8 H9 y9 k1 h2 O
/**************************传递数据给extend**************************************/& Q, S* `2 U, i7 x1 @
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
1 |5 [1 `) G6 O* h9 v) [7 }2 P, \       
9 ]- ?) T$ J' N. `         valueStr                                 = SysAllocString((WCHAR *) L"1232");
! X/ x% T7 t* w7 Y+ q+ l        VariantInit(&pokeVariant[0]);
) n5 L$ A  G$ a2 l        pokeVariant[0].vt                 = VT_BSTR;/ i0 B1 U  F! F+ h+ C1 l- }
        pokeVariant[0].bstrVal         = valueStr;
7 E  f. O3 m# ^2 |. P+ ]
* V, f5 n7 E8 A( m6 O) X         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
8 G( ~7 K, }2 q* q( G        VariantInit(&pokeVariant[1]); % K/ F" u2 q* \
        pokeVariant[1].vt                 = VT_BSTR;9 _% e  S8 _8 V0 G2 ~( f  a$ N
        pokeVariant[1].bstrVal         = itemStr;
  Z% R% O: I) R3 \- y
) K* A/ q; {! f* E; _0 D          topicStr                                 = SysAllocString((WCHAR *) L"system");
/ N# w- k6 r' T6 Z- M: d* T! O0 \        VariantInit(&pokeVariant[2]);
  A+ H- d4 j% {3 X) O) L; s        pokeVariant[2].vt                 = VT_BSTR;
# H6 r+ u  N9 P        pokeVariant[2].bstrVal         = topicStr;
$ G% `/ E( b- v# p* y2 S" s; g2 }# ?- L9 T
//        Set the DISPPARAMS structure that holds the variant.
7 M# F7 x2 `2 t( e$ t4 O
8 h& w) o& V: x9 S" l' k        dp.rgvarg                                         = pokeVariant;+ }/ D, F2 G/ w/ u. u8 z# P$ b  K( i
        dp.cArgs                                         = 3;
' n, _+ F4 ^3 B' M4 z* u        dp.rgdispidNamedArgs                 = NULL;
8 a& B, M0 ]2 U2 `7 L        dp.cNamedArgs                                 = 0;
+ P6 r: S% o5 _+ ^- G( p+ r3 ^7 Y5 g
) P" S! z! \6 m, c  a+ x  f) z: V- G//        Call IDispatch::Invoke()
; g8 q+ n7 i6 q
( ~0 M% h# m" `% }        hr = m_pDisp->Invoke(
* M) H! b7 N1 H+ Z  N                pokeID,
% O. [- H3 l  j, L' I+ D3 e" @0 T                IID_NULL,  j5 ^5 H* g0 g; K7 d
                LOCALE_SYSTEM_DEFAULT,
3 F1 U+ \/ L) s' O                DISPATCH_METHOD,
2 Z" V8 J4 v& G: `0 |9 w2 }  A* F                &dp,
6 B) R$ ?& c) ?- R: s                NULL,
: k0 Q  N' j: i# w/ X                &ei,3 J5 y4 @7 I; Z, ^! d. \% i4 w
                &uiErr);5 a: s' B; r! u. N: o
! B4 g7 ~) C6 }: z* o4 ~
        SysFreeString(topicStr);
9 N( k% A' C% z7 ~2 R        SysFreeString(itemStr);* l5 g# U: w" _! H& }( V
        SysFreeString(valueStr);  D; D! w2 f5 @) d

' U4 i. M& |$ j, Q& P现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
1 s8 A+ ^0 V# d# ~此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
  s! s" D/ C" q2 M
8 X$ ^- c( t, l2 n5 q; p
9 W7 m+ [2 W/ y  U6 m2.这是request的程序1 k3 v  \- a& ~3 W' \0 u- Z  _
//  Request a value from Extend
- _! s, A* X( w  y' F4 l8 T//. l4 A0 q; d6 I
//        Initialize the variant that will hold the BSTR.  Set the variant's
$ O4 b7 v" k4 p3 D6 l0 L//        type flag to indicate the fact that this variant holds a BSTR. Place the4 }8 S" g" o! Q$ r, R
//        BSTR into the variant structure.
! v: E7 N' `3 K5 `9 J
7 d9 b; }0 D  n* D2 ^1 [2 e        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);3 c  x$ P. K: W; ^2 }& ~
       
) L' d& B' q3 l6 E' Y9 v( L  E         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");/ h- s5 K- y: y
        VariantInit(&requestVariant[0]);
/ p9 c/ D) j) G# ]1 m% T        requestVariant[0].vt                 = VT_BSTR;2 G2 I5 O- K0 L( N0 s
        requestVariant[0].bstrVal         = itemStr;
( j$ z- \1 J) i( p
( l* R* R. Z( V! [          topicStr                                         = SysAllocString((WCHAR *) L"system");
6 |3 d/ N- C. ]: g; k: ?+ ]        VariantInit(&requestVariant[1]); ) \7 e9 C0 q/ m" S4 U* ?7 A
        requestVariant[1].vt                 = VT_BSTR;
( y: M) L0 w( t. y  X/ b% y& U# n        requestVariant[1].bstrVal         = topicStr;
+ P! z# e- Y& v" e+ n- Q
: u# r* p8 c( o- W//        Set the DISPPARAMS structure that holds the variant.
  ?8 y. X1 M8 d# c
1 ~/ z$ F$ W7 P) y! b        dp2.rgvarg                                         = requestVariant;) L$ M5 X0 T' R1 ~. T9 Z. S# M  [/ C; H
        dp2.cArgs                                         = 2;( |! S! N$ Q" I% o& E- O
        dp2.rgdispidNamedArgs                 = NULL;
* h, a9 Q  c# ~6 N4 M. L( n        dp2.cNamedArgs                                 = 0;
8 V% \) U- ^0 b% W* h6 s
0 N) ]( B% S, k" v         var.vt = VT_EMPTY;
5 D* i1 _, M) q% x( [
' P/ ]" p( [& O& q5 f: m- M/ ~  s//        Call IDispatch::Invoke()
7 ]% h/ P1 A# e8 e5 [! q/ \- [# h5 l; u; Y* _
        hr = m_pDisp->Invoke(* x3 Z# k! N9 ]
                requestID,
7 q) P: k( w7 x. ?: Y" S5 R                IID_NULL,
: Q) s1 b, Z. S  N/ e9 A                LOCALE_SYSTEM_DEFAULT,  }$ l/ Q; r9 D5 ?8 `( Y. K
                DISPATCH_METHOD,
& E- Z+ y! B7 L6 o# o                &dp2,
6 C8 n3 S9 A  U- k6 f3 d9 `                &var,
' l1 z# q( D; `5 V# y3 f" v9 y                &ei,
3 \: I' T) o  k$ d# W                &uiErr);: N8 c) B3 d/ {0 Y
! P% t+ w+ S& N5 j- u
        SysFreeString(topicStr);
. H$ J8 _% G. u( Y! s4 A        SysFreeString(itemStr);
7 y3 k, A% Y5 W  |% O& I9 |1 c请问该程序是获得extend里面的哪个值?( x  S/ L/ O' z6 t! M% W6 C+ o- c
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-7-13 07:26 , Processed in 0.015325 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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