设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10509|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:) E; u# l& g' W: f. w% m
Name = (WCHAR *) L"Poke";
" s6 o" G6 x1 P$ j) r5 n                
1 x; r, U- x4 U: m7 I1 I% s6 o        hr = m_pDisp->GetIDsOfNames (
/ W/ z# }9 b# J8 b/ d                IID_NULL,                                // reserved/ V0 y2 ?! `0 Q* [3 V  ~
                &Name,                                        // Array of names to get IDs for3 L0 q' Q; b4 S
                1,                                        // # of names in the array6 I8 O9 u8 r8 @- L
                LOCALE_SYSTEM_DEFAULT,        // System locale0 b4 g* P2 m0 p/ E
                &pokeID);                                // Array of IDs to fill on output6 x8 u' U; J6 x3 M  _) Z
                        6 h+ A8 n# n* h7 F7 Z4 }
        if (hr)
! ]6 k3 @) l1 p/ s. }. g! {                {8 W2 }, Y* J8 j
                MessageBox ("Get Poke Unsuccessful");2 g# H3 F) m$ m) M. P9 u$ e3 ]
                return;
/ h0 k! j) Z) s$ @5 f* K3 i0 j                }: N7 V2 G1 ^$ h: U0 W

  e6 t# V0 X5 c, }( t- A- I% n1 ]/**************************传递数据给extend**************************************/
4 X& b3 p) m4 p+ S        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
( y9 A, R5 V* \8 k9 `: I       
( P8 m: F- j! U" X8 a9 E- l         valueStr                                 = SysAllocString((WCHAR *) L"1232");
0 r6 D- y/ [9 u' z, r        VariantInit(&pokeVariant[0]);
% r) b0 ~0 Q1 m" X        pokeVariant[0].vt                 = VT_BSTR;" C5 X3 v/ _/ |9 J
        pokeVariant[0].bstrVal         = valueStr;
- G4 h; G" |# ]7 K
- Y* k6 \5 G0 L% F& \( x         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
0 B4 z/ q) w. O        VariantInit(&pokeVariant[1]);
% \  V, ^6 l( }' c  b1 `- X1 _        pokeVariant[1].vt                 = VT_BSTR;9 W) ~* o$ x7 d/ |" K2 S
        pokeVariant[1].bstrVal         = itemStr;
& L6 s% ]" E/ i; j: d! Z2 b3 w6 {5 U) G  q9 z- n
          topicStr                                 = SysAllocString((WCHAR *) L"system");
5 V' c  d( R7 u0 `% F) k1 o- h        VariantInit(&pokeVariant[2]); 7 |" O) T8 Y/ l, x3 U) N
        pokeVariant[2].vt                 = VT_BSTR;
$ g* h) D8 i2 s        pokeVariant[2].bstrVal         = topicStr;' a# h9 @7 G) w2 u5 A# `$ ]

2 G( q6 z8 C4 T4 m; u. l  B' h//        Set the DISPPARAMS structure that holds the variant., r- z) ~* A  P) S8 S, b

6 B' {2 J( v! ], u3 t        dp.rgvarg                                         = pokeVariant;8 W9 P# y. |# e% z" L' W8 r, T0 ?
        dp.cArgs                                         = 3;/ x" Y6 b& L: w7 G% S! y) Z
        dp.rgdispidNamedArgs                 = NULL;! y5 ]+ |0 J: q- `( K/ j
        dp.cNamedArgs                                 = 0;
. L/ F7 M6 c% @- W3 d6 J" g0 [3 a" \- v8 D
//        Call IDispatch::Invoke()8 y1 q3 S7 a( y3 b" [9 ~$ U4 d

/ O2 n6 l- S: o6 K4 W        hr = m_pDisp->Invoke(9 u$ @4 h7 z7 r6 L
                pokeID,
, p0 H4 J) u$ ?& P                IID_NULL,* v- A4 a& Y# B7 l0 [! V
                LOCALE_SYSTEM_DEFAULT,
1 F8 Q) ?2 Y) I3 W+ h$ W                DISPATCH_METHOD,( F# h3 C' x% U. E' U
                &dp,
: K7 S' D( k/ {. N6 G8 s                NULL,$ o' Z- U& Q- e
                &ei,' M1 X, p6 D# }* |
                &uiErr);4 w/ ~1 p" H" H6 Y. Z# B( C  V

' ^# {( m' m6 [7 j/ r( S        SysFreeString(topicStr);
$ D3 d: M0 l% X* j9 j0 w6 m/ w        SysFreeString(itemStr);
/ }& H8 Q% q1 B$ }" I$ _% m1 V: }        SysFreeString(valueStr);" ?' S8 D6 @, I- o! a6 g6 U" e

+ s& h( |. c- I3 M: P现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???, H; k( J/ d" {, A4 z9 O
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
& U2 I9 \' |$ Q5 [
( `0 p( s2 |  @( n# B- a7 K/ D$ G! G( X0 E$ I& {8 ]
2.这是request的程序
& u' ~" e3 {) e5 N% ^0 z1 u- `//  Request a value from Extend- e1 k8 E- s4 e- D3 h0 W6 b% ?
//
9 E# w2 {( ^9 e1 F- f1 C//        Initialize the variant that will hold the BSTR.  Set the variant's
. w5 ~. A% F/ |+ ]3 b! f0 s//        type flag to indicate the fact that this variant holds a BSTR. Place the0 ^; J* a% r* ?& a% S9 L  F
//        BSTR into the variant structure.6 [2 L2 |( }* L8 ~+ o
6 P* u, E# V! o
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
6 N4 f% ]/ b+ M        4 }& F- S' W5 ]* z7 c& m! n
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
1 j2 Z, ^& p, |" a8 @        VariantInit(&requestVariant[0]); : |) Y6 W" s! ~  R5 H9 I
        requestVariant[0].vt                 = VT_BSTR;9 e" Z8 D( }# D1 I; x% f5 s
        requestVariant[0].bstrVal         = itemStr;. b; u# ~% r, |" N8 w5 g2 P$ u

4 z3 }4 R( p" B5 m* r! w: s          topicStr                                         = SysAllocString((WCHAR *) L"system");
) N/ D& T' A3 ]4 I9 {7 `        VariantInit(&requestVariant[1]);
5 W1 f0 o! h$ ~4 w  F3 i        requestVariant[1].vt                 = VT_BSTR;
; e. Q- x2 s2 b5 T# r! z        requestVariant[1].bstrVal         = topicStr;
- m- x. }9 h. i6 Z
4 L! e- B6 J+ @: S# y  b//        Set the DISPPARAMS structure that holds the variant.
; o$ u  Z% x" J- U. I2 q
. h% t4 ^3 t1 N- a$ A& j7 I" M        dp2.rgvarg                                         = requestVariant;& b- m1 W: b; z( |% p
        dp2.cArgs                                         = 2;, k) \: n. W, i: P; t( t" _5 k
        dp2.rgdispidNamedArgs                 = NULL;
* k7 w0 a( u, v9 L7 [2 G        dp2.cNamedArgs                                 = 0;
- i3 j6 P4 ]; i6 A: Q5 j! Y: a& v/ I9 {: y  e
        var.vt = VT_EMPTY;0 C! C9 i# O8 ~
8 M' Z) s4 _1 m+ @' c$ Y2 {* _
//        Call IDispatch::Invoke()
& e6 l5 [9 Q0 D6 C
; N5 y3 g0 z: \0 `        hr = m_pDisp->Invoke(2 y# O0 {$ E( {! M( A4 J( J. G
                requestID,; d% ~( B1 y! J" s2 }* x
                IID_NULL,
! t5 M9 M2 v; u" W7 L- B3 b/ Z9 i                LOCALE_SYSTEM_DEFAULT,' x9 U9 u& N. [# C2 y
                DISPATCH_METHOD,( N! c3 G  ~* ~  t# _2 o: o6 M4 s
                &dp2,
) s% U; c1 V8 R1 T) s# U9 X                &var,# S4 `8 |/ t0 W1 ?
                &ei,
4 ?& `( y# E+ n% V* @% }                &uiErr);
' A/ @' t$ }) z; A* z5 y
! w; B& t  q* T3 Z        SysFreeString(topicStr);' c( p4 C; m- j( U) e
        SysFreeString(itemStr);) E6 Q+ ^6 n8 z- s- V( X' G  k
请问该程序是获得extend里面的哪个值?) X/ q; {; b5 |/ |! U5 a/ W, `
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-28 16:28 , Processed in 0.015163 second(s), 13 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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