设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12667|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
$ F1 |# e# [8 A  _4 ]Name = (WCHAR *) L"Poke";
$ C0 w" x1 a- M. ?                
, Y5 l! Q! l' h        hr = m_pDisp->GetIDsOfNames (
. G+ b1 I& s4 Z+ h. c& e' g- Q, S4 e                IID_NULL,                                // reserved
3 r6 M" C: h8 ?9 V! C9 B8 |                &Name,                                        // Array of names to get IDs for
. Z4 J. h5 Q& e0 V: U                1,                                        // # of names in the array
: D7 p$ `2 [  I6 |                LOCALE_SYSTEM_DEFAULT,        // System locale
; N+ f; C3 G5 i) s8 S- k# U                &pokeID);                                // Array of IDs to fill on output
+ U  j/ ?* M5 G# W5 c; M2 c9 {                       
; o3 f2 M+ x- o6 A1 [% `& w( ~        if (hr)
5 G. s% Z1 |1 U  N# r                {) {* I) K4 j" N9 t
                MessageBox ("Get Poke Unsuccessful");  z3 e" ]1 X1 k4 W1 Y4 |9 V
                return;$ t6 Q( [, _8 P' L, Z
                }) H/ I* i  d( I2 y( i9 T

5 ?& X2 J: t$ `" n& T/ T- _" b; j/**************************传递数据给extend**************************************/1 |( o. k1 P, q  I( s$ f
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);+ ~! z6 l& \! i( ^
        4 G7 A1 z% |& p6 L2 L. G/ E
        valueStr                                 = SysAllocString((WCHAR *) L"1232");0 V3 t. a" n3 n' v
        VariantInit(&pokeVariant[0]); : x( L2 n( m: v; u
        pokeVariant[0].vt                 = VT_BSTR;
; s6 @# ]6 Z# F0 K7 Y& R3 ?        pokeVariant[0].bstrVal         = valueStr;& u. [( U  S: c4 v

+ f  r0 ]: C9 Y' C  c; [         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");4 Z# z* p2 u$ S' u0 i
        VariantInit(&pokeVariant[1]);
, U% q' J1 }2 l0 b        pokeVariant[1].vt                 = VT_BSTR;9 V2 N, U+ i- C3 {6 S
        pokeVariant[1].bstrVal         = itemStr;& o4 R" H; c* L
2 ], i+ ^2 m4 `5 l
          topicStr                                 = SysAllocString((WCHAR *) L"system");4 h. [' e& ]' Q2 B; m8 E% ], k8 P' |! H
        VariantInit(&pokeVariant[2]);
5 S) T- g2 Z7 k- H" F9 j  }        pokeVariant[2].vt                 = VT_BSTR;8 _8 C8 B. o9 }" H/ m  b
        pokeVariant[2].bstrVal         = topicStr;
' F6 x( v* w0 }2 A4 i: y; t, h& V, q8 G4 d5 q; L
//        Set the DISPPARAMS structure that holds the variant.1 c! G$ G# N# i  ~& {
' C  N& h* {8 O/ L
        dp.rgvarg                                         = pokeVariant;
+ A1 W" b; @; J  J/ p, z        dp.cArgs                                         = 3;
! [$ k" h+ Y) g' c1 u3 E        dp.rgdispidNamedArgs                 = NULL;
1 c' r. Y: M& P2 m2 M- X" d        dp.cNamedArgs                                 = 0;
+ h/ B3 H! i7 A) R7 e7 ?
; }. f7 z( ]# J# H( f//        Call IDispatch::Invoke()
/ g9 @+ M; D8 z, ^9 t6 F/ ?; N
: O- P# J: ?7 K0 h. ?        hr = m_pDisp->Invoke(
. F6 R) m( u. W6 D7 T- J. q+ c                pokeID,
. f4 k6 `: d! n: ?+ ?: ~                IID_NULL,9 O& f5 j) f* l" p
                LOCALE_SYSTEM_DEFAULT,
8 O( I% j0 a  C9 F/ n# E& s8 L: W: E                DISPATCH_METHOD,, o( w! X0 h5 c. U; D8 B3 e" D* f
                &dp,
% E0 {" p# s/ F& K                NULL,
' c/ J- }5 Y. I# T/ o3 N' R                &ei,
% s' X: N# O+ ^                &uiErr);
! q9 q& F6 K; U7 ]
3 l6 R- K, d8 M- y6 c        SysFreeString(topicStr);
! T4 F: f9 u; ~5 h        SysFreeString(itemStr);1 S7 D0 P3 g' z7 ^. a
        SysFreeString(valueStr);4 a  B+ C' ?- n
- ]& r! a8 u% h( P$ s
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
6 J( ?1 e; Y' @7 j, B( Z此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????% K# w7 G, _2 M; J" [

0 h6 M" |( T" A- o
# O; X$ p* v: b0 E2.这是request的程序# B: x9 b: d% X* f1 ]
//  Request a value from Extend9 C  ^$ A) ~  H. A' f( h3 X
//
* A( r+ }+ s' w1 c5 x  p//        Initialize the variant that will hold the BSTR.  Set the variant's6 N- T/ B$ k% J. l
//        type flag to indicate the fact that this variant holds a BSTR. Place the) h, c6 j+ _7 v, G, K
//        BSTR into the variant structure.! G2 S( Y  |. H  o, {% N5 [
, d* @2 v+ `/ @4 J
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
; D$ t8 Y2 n7 Y0 K        2 m* r' m8 N0 \- _% X  j
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
0 \  D& T( v; F9 x4 n/ S+ \        VariantInit(&requestVariant[0]);
7 |0 t2 O) s3 [! A        requestVariant[0].vt                 = VT_BSTR;8 C# H2 V2 K2 X+ u9 v- N' M9 `/ F4 {
        requestVariant[0].bstrVal         = itemStr;7 t4 a+ d" h6 Z+ F+ k. H

& {2 C$ @2 u* e0 E          topicStr                                         = SysAllocString((WCHAR *) L"system");
" k  n7 e# O! ^& H! g$ k2 g. ~' ^9 n7 Q        VariantInit(&requestVariant[1]);
; w2 [1 k7 g3 D5 v4 D" n, A        requestVariant[1].vt                 = VT_BSTR;
! @2 ^' ~& v: Z# T9 o( c; `        requestVariant[1].bstrVal         = topicStr;% v4 e4 q0 G  v- A9 b& V. }$ w
) {# h( \& E- |0 Y' c
//        Set the DISPPARAMS structure that holds the variant.- \$ b" a, T9 C1 U
; R& f5 I( f2 {+ M" _+ r
        dp2.rgvarg                                         = requestVariant;
5 e, a! I" r, l. w& U        dp2.cArgs                                         = 2;' h  r6 y3 }. H7 {
        dp2.rgdispidNamedArgs                 = NULL;
& r9 j1 N: a$ x! Z0 G        dp2.cNamedArgs                                 = 0;
% b) }: R8 R" ]& [
& G4 p) [+ U. X( }5 N         var.vt = VT_EMPTY;. _8 a* {5 ]8 w9 f9 l
2 s1 q* w& N. Q! {( n& p. n& }
//        Call IDispatch::Invoke()
5 t0 ^% \  {% I, U' w' @8 W$ M8 m8 i
        hr = m_pDisp->Invoke(2 p; C+ B9 _2 ^9 m0 \. I/ Q, F
                requestID,4 A" Q2 |) @3 o9 j" e$ M
                IID_NULL,1 M4 m0 u4 Z$ [5 U+ j
                LOCALE_SYSTEM_DEFAULT,! a3 z/ V- F) [7 ^& S
                DISPATCH_METHOD,  o, `" K' [0 R1 @& b+ e
                &dp2,
6 @+ C% t. ~8 x# I, a                &var,% Q9 B! L2 z' Y) I. O( J4 z
                &ei,
5 J8 r" M4 h5 D7 [. g9 ?0 y1 Y2 O* o                &uiErr);
/ _( w6 {% ^( R; ]& s+ ]7 s/ ?, \) a/ E
        SysFreeString(topicStr);
) L' v5 A& u$ u$ k; a        SysFreeString(itemStr);  z; ^* C: q8 L% W1 I  b6 D
请问该程序是获得extend里面的哪个值?) u& T" `- I6 r6 D$ a/ a0 x3 `
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-8-24 00:19 , Processed in 0.013957 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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