设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10442|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
& q# o: Z$ F3 X; K4 Q" _Name = (WCHAR *) L"Poke";2 s3 D8 k2 U+ f/ P& j, s( R% N6 u: c
                 7 L2 C% G0 O8 J: U) A% y
        hr = m_pDisp->GetIDsOfNames (
, I) P! u3 x8 w* I/ T# d& }                IID_NULL,                                // reserved
9 m( v" |  j0 a+ D                &Name,                                        // Array of names to get IDs for2 n/ I& Q4 Y0 f: E; e
                1,                                        // # of names in the array9 ^4 L* A" L1 h1 h
                LOCALE_SYSTEM_DEFAULT,        // System locale9 d, ~1 P" F( E* Z7 @: w
                &pokeID);                                // Array of IDs to fill on output
4 o0 b7 P4 a9 i2 t& M! o2 c6 j                        + M- B) x! F3 `7 ?& w
        if (hr)! \2 u2 ]- I% s; ^
                {
5 V; b: K2 f: X; ~" _( g4 t                MessageBox ("Get Poke Unsuccessful");% F' C* [. v9 }
                return;
, }8 c! m8 c4 X( T: E% j" ]9 ?                }
5 v1 s3 D/ S5 l' [4 `8 n* ~; M
: D# j+ W- ~4 z- O' u) H# K) S/**************************传递数据给extend**************************************// \4 U8 j" i& Q  p& @
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);% j  Y; I& `/ E" {8 U, g/ L
        " q1 J* \( D0 ~$ x; b8 K
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
  N0 t+ r' s1 {        VariantInit(&pokeVariant[0]);
% f3 F  I! ?" I5 z        pokeVariant[0].vt                 = VT_BSTR;2 h3 ~0 a2 W3 R" l! }, q$ b5 x: c
        pokeVariant[0].bstrVal         = valueStr;7 G. R. }/ D$ A
+ w5 g+ h! q" O3 X
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");( H, x6 r+ P7 r% q2 S9 d4 }3 B
        VariantInit(&pokeVariant[1]); 8 A8 p3 b' A5 V, |
        pokeVariant[1].vt                 = VT_BSTR;. W9 d7 F9 \: I. B
        pokeVariant[1].bstrVal         = itemStr;; V( J  b1 c6 x$ x5 J6 l

9 {0 H! x- u7 b! y6 A4 M7 p$ b          topicStr                                 = SysAllocString((WCHAR *) L"system");
, y) u% d+ P! G! c4 l, G1 M9 ~8 u        VariantInit(&pokeVariant[2]); 7 k6 t& Z% _0 T- o" V' }7 Z+ J
        pokeVariant[2].vt                 = VT_BSTR;
& Z' @4 H2 M+ e: p        pokeVariant[2].bstrVal         = topicStr;
  M: T5 X" F9 C! H9 a* z$ M
; v2 ]6 K& [* E2 n4 Y* I//        Set the DISPPARAMS structure that holds the variant.
& J$ ?# g7 }- m" A. f5 b$ d' x; c$ R3 O7 Q9 N& P1 t; _
        dp.rgvarg                                         = pokeVariant;- z0 |, L  q9 h! k9 E6 b1 e
        dp.cArgs                                         = 3;
- Q4 z2 \3 |0 n        dp.rgdispidNamedArgs                 = NULL;
2 m3 R7 s  x7 Z2 l9 D. [6 V! Q) n  A        dp.cNamedArgs                                 = 0;: `2 M5 R& d9 b/ t

9 n: A, J3 M; Y; r+ U//        Call IDispatch::Invoke()1 O. `9 a2 c$ e4 y% e- W& G
3 D" e0 K( g5 h  D3 C1 N$ C
        hr = m_pDisp->Invoke(/ x: A9 o0 n. W; M+ t3 a" O3 y
                pokeID,' s6 L) K& ]2 Z4 F$ K) q  h$ x: G- A
                IID_NULL,' M3 o& E, p+ `9 C6 ^+ S
                LOCALE_SYSTEM_DEFAULT,! A9 L. `! ^6 v1 v+ Q+ z
                DISPATCH_METHOD,' `  O- z( Z$ M' a' E$ J! i% S+ S
                &dp,5 c/ B6 M+ n: h+ W5 I" d2 d
                NULL,9 h7 T+ k8 P5 l+ A
                &ei,: L7 j+ u6 ^; k7 ~7 H
                &uiErr);
$ Y$ C7 o5 z- V3 n. b3 [
0 T6 Z: K  k8 b  T+ p" X5 }; A3 }" S        SysFreeString(topicStr);
4 h( b2 h4 T& V5 F6 I0 ~7 e        SysFreeString(itemStr);
3 y4 j4 G+ w) N' J        SysFreeString(valueStr);
' U+ W  G4 S; i, p' j* L7 f% z4 u7 M: I; ?+ W0 }2 Q
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
9 B  G4 m# J/ s9 T/ l8 z; n此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
, E' N. T3 n6 v" @! \: ^" W
0 _5 `" G# g; c
- x9 ?# M5 R9 \( H$ G2.这是request的程序
+ ^* c* l" A" P. V' ]//  Request a value from Extend3 e  m' X% M7 ?. K* N: U! J3 k
//
3 S, O" e4 J; m$ Y) N# |& R//        Initialize the variant that will hold the BSTR.  Set the variant's0 ~  ?% Z9 y: e) n  [; L2 P& ^+ x
//        type flag to indicate the fact that this variant holds a BSTR. Place the
  _5 s/ {* M9 M) |( H! H5 G//        BSTR into the variant structure.
$ z9 K1 Y9 a$ T4 R2 K1 n. r9 h, t% I# Q! |# ~/ M  k$ i3 y; S8 c
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);) G& E  w- R3 ?  r- K
        / U4 S( L, _) L. ?& H6 [
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
0 d/ ?- a  {9 n, D2 o% g: N" a        VariantInit(&requestVariant[0]); & j7 y0 m* H  a/ j( y
        requestVariant[0].vt                 = VT_BSTR;
, t/ `+ ~4 T  t$ a3 [9 c4 Q        requestVariant[0].bstrVal         = itemStr;
: x$ n1 F% N1 L' q/ A% P/ C7 `( j$ `% [! B/ c) V7 M( ^
          topicStr                                         = SysAllocString((WCHAR *) L"system");" a( K( b' P' M  }
        VariantInit(&requestVariant[1]); 5 ]* G" c3 u: Z  o5 ~. a; l
        requestVariant[1].vt                 = VT_BSTR;4 u: {$ Z3 ~8 J3 L( S; E( J, a; f+ z; r$ e
        requestVariant[1].bstrVal         = topicStr;2 b  i& |6 F$ Y( F5 f

; m; [( p3 x6 `2 R8 B! {//        Set the DISPPARAMS structure that holds the variant.
3 R' [  u  M$ T- x* h' n
7 {- V& y: _  }0 _5 H( r, ~4 i        dp2.rgvarg                                         = requestVariant;  p' Z  _8 [  t4 f! V8 B2 p
        dp2.cArgs                                         = 2;# J/ D: [. U! n+ b( X4 @  t: o
        dp2.rgdispidNamedArgs                 = NULL;4 o5 Q( a' s& q& ]; s! Q% U
        dp2.cNamedArgs                                 = 0;0 O8 u$ [$ X3 J: S' [- _5 T
1 H5 l4 _2 ?. D; h2 t
        var.vt = VT_EMPTY;* @) |. ^; j: R

7 n+ v& Y' x2 A! a- `//        Call IDispatch::Invoke()
' }- [9 Q& O* g9 a0 h# L* c0 g* ~, I& H9 J, o) B
        hr = m_pDisp->Invoke(
% M) U7 r: e1 l2 w- m0 U                requestID,
! e( ~, N+ K: }: z- S2 O" }                IID_NULL,1 e: L0 Q! f% G1 D: h
                LOCALE_SYSTEM_DEFAULT,
2 V+ z5 a8 U& Q3 g                DISPATCH_METHOD,6 m* |* S$ X5 ~8 ?$ O" v, D
                &dp2,
6 G& O1 |. m5 i8 [" c( t6 W/ Z                &var,
0 A5 @& o% s! W8 ]0 A                &ei,
, D9 E! V7 |: m' n2 f+ i. q5 _% O                &uiErr);! n4 z: `& W% s# B4 D- l
" F; {# Q: }, ?& @+ P( B3 U2 b4 U
        SysFreeString(topicStr);% W9 b, V' |' T+ y
        SysFreeString(itemStr);! i6 |. A6 |+ U
请问该程序是获得extend里面的哪个值?. h: I3 V& ]" N
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-25 17:14 , Processed in 0.014437 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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