设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11633|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
; z1 j+ n! S  Z; ^& TName = (WCHAR *) L"Poke";
# T. h. K2 y& _3 Y( T, k                
3 I/ F! j* m. i        hr = m_pDisp->GetIDsOfNames (, o1 F. V9 m  E; ]7 U
                IID_NULL,                                // reserved9 ]/ i' l$ T; B4 _
                &Name,                                        // Array of names to get IDs for
  D/ u, K* F5 x8 G                1,                                        // # of names in the array# ?7 g  V; v) _0 I9 c0 y, s
                LOCALE_SYSTEM_DEFAULT,        // System locale
  Q% g$ B; g$ `. C                &pokeID);                                // Array of IDs to fill on output
( Z4 ^8 g* G3 w' d; O* Q) ~                        1 h! b4 I1 J, H0 m2 i
        if (hr)
; A7 S- X  \6 g$ U, {% s                {
" ~/ ^* a6 F- Y  u                MessageBox ("Get Poke Unsuccessful");( H/ D, D$ w' q
                return;
9 T# V; Q1 W4 W* b                }/ J2 a  v; M& O) s4 D
; N$ d4 Y1 D$ J9 p/ b8 R& t
/**************************传递数据给extend**************************************/9 Z( ], E. D  M
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
( ~( ]. c) _7 S& `9 A       
3 ^4 E4 C8 j3 f) ]         valueStr                                 = SysAllocString((WCHAR *) L"1232");- W  _4 T' l( p" [
        VariantInit(&pokeVariant[0]);
2 u6 C7 N, F# P        pokeVariant[0].vt                 = VT_BSTR;
  a2 P/ R: e( p5 y  e+ C9 S        pokeVariant[0].bstrVal         = valueStr;+ v; K6 F1 Q: ~$ r5 m* }2 E
* c$ \6 r/ Q; I
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
) B# |7 @8 Y1 F# K        VariantInit(&pokeVariant[1]); - G) Z$ Y4 G1 c4 e' |, K
        pokeVariant[1].vt                 = VT_BSTR;
* J" v/ o; z1 W: T& p$ C$ {        pokeVariant[1].bstrVal         = itemStr;
0 @4 _5 Z8 V0 F  ~" g3 x6 m" N# S4 q4 S
          topicStr                                 = SysAllocString((WCHAR *) L"system");! j; ]- a9 K3 Q) F* d- }
        VariantInit(&pokeVariant[2]);
+ I* R3 I4 u) Z* [        pokeVariant[2].vt                 = VT_BSTR;& n' a2 A  J# [6 h, `
        pokeVariant[2].bstrVal         = topicStr;
$ {; E1 ^( j3 V0 u
5 Z3 A5 O5 r% k2 m# V& [7 o//        Set the DISPPARAMS structure that holds the variant.2 I% E- v& d, y1 k5 n

1 X3 B6 T; p2 U( m" n) b        dp.rgvarg                                         = pokeVariant;
6 @7 X( o0 p" @- A7 a3 u$ C        dp.cArgs                                         = 3;, B5 B8 x6 y- r
        dp.rgdispidNamedArgs                 = NULL;
0 V8 n% o& K( U% _# I5 s1 |. P        dp.cNamedArgs                                 = 0;
( v) \, F) O/ X/ a1 t% h
$ f: Z9 y$ ^1 {1 T2 O//        Call IDispatch::Invoke()8 G; B' B1 C& K% h( P$ A( A

4 a' y2 [% Y( y8 Y8 n        hr = m_pDisp->Invoke(
  E8 F) W1 a$ J5 P& z                pokeID,6 X) F) e$ \1 a! t( o
                IID_NULL,+ M, E- x' V) Y3 z6 E0 Z0 u
                LOCALE_SYSTEM_DEFAULT,
9 b* w$ y% |, \                DISPATCH_METHOD,
7 N- }2 }1 r% c/ H! M                &dp,; x/ i1 ]' {" G0 U: C8 |& s; v
                NULL,# i7 y7 S' h( J5 o: [. w
                &ei,
* `' T( ^' q. z3 e                &uiErr);* u' J/ i3 x% q3 g* F1 w/ w
! j0 x$ f! F: X6 }- X, f
        SysFreeString(topicStr);
1 F# N0 o2 a- O8 t        SysFreeString(itemStr);! u* u% [6 o; a7 W2 G( i' q% H
        SysFreeString(valueStr);  C9 q5 ^* n9 G0 @9 R7 A
6 i6 _; |7 b1 W
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
+ V7 u! P# T" O) T此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????+ v' q7 Z. N2 {

. B; ~7 q$ b. ^/ R7 N
. T" I! }+ S5 h2 h' u2.这是request的程序
$ Z, o; f3 a' Y: C. E6 n  L' b//  Request a value from Extend
# @" q1 \0 R1 r5 M3 M+ X//
6 q6 E2 i/ T: r9 `# J9 r) B//        Initialize the variant that will hold the BSTR.  Set the variant's# A) F1 @) M0 _" a! W3 |& S
//        type flag to indicate the fact that this variant holds a BSTR. Place the
2 M1 k9 G- k/ b. s//        BSTR into the variant structure.) E3 _6 {5 p  `+ Q1 l. D0 z
& }, l( ~8 d7 V
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);' P9 Q+ C8 i3 d4 ^3 v# [2 q
       
# T9 [7 e+ k3 O5 x, J$ B1 @         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");* G8 b+ [5 o& I! e4 Q+ t0 q# v
        VariantInit(&requestVariant[0]); ) _* C# f, S0 B# S9 q  `5 _) K
        requestVariant[0].vt                 = VT_BSTR;* E7 u( o7 q% j
        requestVariant[0].bstrVal         = itemStr;8 O$ M1 k0 @/ a0 q) T' o
$ j: z* ^, A8 O0 k, }
          topicStr                                         = SysAllocString((WCHAR *) L"system");7 o4 N8 i) D; z
        VariantInit(&requestVariant[1]); ! Y/ G) d4 d& I
        requestVariant[1].vt                 = VT_BSTR;
8 W- v  Z, B; w0 Y) W        requestVariant[1].bstrVal         = topicStr;
" C7 K4 f& {! \5 u* @6 r
% l% e( u3 j8 b  e3 Z//        Set the DISPPARAMS structure that holds the variant.
7 _# a3 l  ^1 _: N  d
; P4 |% H, N6 V5 m# S        dp2.rgvarg                                         = requestVariant;0 v; j& i+ f2 v! {& m, j
        dp2.cArgs                                         = 2;$ \; \( N6 v: D+ Y
        dp2.rgdispidNamedArgs                 = NULL;
, w9 h* N! K* S, l( P        dp2.cNamedArgs                                 = 0;8 k5 l( @, N2 [( z7 Y- b
8 a( k# n( q* p* h: ?
        var.vt = VT_EMPTY;0 j" P3 |& S6 `3 X
2 G" ^. \) r" f9 g4 U* n% t4 K
//        Call IDispatch::Invoke()
6 v8 l: o. ^$ j9 Z& X* Q( u% P8 h; X* X
        hr = m_pDisp->Invoke(# b0 ?0 d) @; d4 b# v' j
                requestID,8 d; H' F* [, J+ X9 l
                IID_NULL,
  S% D. j# j, o+ Q( G$ B2 i% x- d% V1 s                LOCALE_SYSTEM_DEFAULT,
! P, f- u* a9 m  T# n6 ^  Y                DISPATCH_METHOD,  E, g: G# C; ~
                &dp2,* |& b6 k$ O$ l% T  e4 q
                &var,' V2 M; i7 \: W& q( m4 q) _
                &ei,
2 a& u% [5 l7 A7 u" b/ M                &uiErr);
" {! {/ z" j4 S+ W, b$ I# y+ ?
2 m7 G7 l9 ~3 f8 h        SysFreeString(topicStr);
% X1 T1 Z' Z2 t) u+ |" p, F        SysFreeString(itemStr);7 n: n- x/ ]8 w! o: b- d
请问该程序是获得extend里面的哪个值?( w; `: n* {: q' b9 x8 o
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-7-16 07:24 , Processed in 0.013006 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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