设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10851|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
6 E, s5 I. }5 a1 ~Name = (WCHAR *) L"Poke";/ k6 d- O0 _* `
                
% A* R6 j) ], p( o0 W% u  F) P        hr = m_pDisp->GetIDsOfNames (* t% s: P! b0 Z% {8 C' ]( W  y/ u# A
                IID_NULL,                                // reserved
( {  x- O  N1 x                &Name,                                        // Array of names to get IDs for6 ?4 U) }/ e" \# W9 p6 f2 S
                1,                                        // # of names in the array
- @% S0 O2 J+ M6 \: S. A' Z                LOCALE_SYSTEM_DEFAULT,        // System locale
& l8 h( e+ |1 a/ y* [1 _                &pokeID);                                // Array of IDs to fill on output% i/ `9 H* p! X+ J0 g
                       
8 M0 \) q" a. X& j% ~: \        if (hr)
8 r& M- l( `' x9 {* l                {
1 \$ W+ E# {* q* k9 ?3 i; t                MessageBox ("Get Poke Unsuccessful");: ~) d! X2 e; X: f: z9 G3 L' d
                return;1 l& M* x' _0 B5 |, b, i* N9 X2 y' t
                }  o6 q2 B/ y4 g  M% z/ x
4 R9 `) o7 a9 C
/**************************传递数据给extend**************************************/& d3 B5 o! E0 R
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);0 c4 O, k" E/ E/ T
        2 |1 O% F) u* K( S  R8 {" ~7 p! ^9 q
        valueStr                                 = SysAllocString((WCHAR *) L"1232");# @. ?. w+ p! n& n/ Y5 Z
        VariantInit(&pokeVariant[0]); & e- b7 i/ n. h5 x& _" ~# ]. T" ~8 |
        pokeVariant[0].vt                 = VT_BSTR;
) d4 b5 l& v/ I        pokeVariant[0].bstrVal         = valueStr;
1 x, Z" Z% z6 x) q0 W4 u9 r' W2 E1 ~- z( i7 \8 g0 ?7 R: P* ]# U
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");" q1 V/ t) q7 Q
        VariantInit(&pokeVariant[1]); , I3 L* h' _! H7 v, x$ w6 C; H1 h  O
        pokeVariant[1].vt                 = VT_BSTR;
3 q7 a( u2 ~; _( |        pokeVariant[1].bstrVal         = itemStr;0 S: I, |* m2 C0 W" z9 D: J3 j* S

# y4 a: b3 J- R, h          topicStr                                 = SysAllocString((WCHAR *) L"system");
  X$ j/ e' J) J8 ?3 [+ h( r        VariantInit(&pokeVariant[2]);   ]( o6 Z& x; F' C3 s' C: u" `
        pokeVariant[2].vt                 = VT_BSTR;' S* u  N4 |0 d
        pokeVariant[2].bstrVal         = topicStr;
6 N$ U% j, K, _8 ~* |
4 |5 V4 F; j% B. H//        Set the DISPPARAMS structure that holds the variant.. c; \0 L0 C- R

5 y. \8 v) w7 Z        dp.rgvarg                                         = pokeVariant;% T- s, @1 Q6 Q) M  f
        dp.cArgs                                         = 3;
0 E4 U2 A; n; r2 k        dp.rgdispidNamedArgs                 = NULL;
$ |( P- s; d  z, R  G( ]! z/ h        dp.cNamedArgs                                 = 0;
2 L( C' L8 D( y7 V" A% k0 P
- E% K- Q2 o8 U. N& y6 h; C) S//        Call IDispatch::Invoke(); j: x3 Q1 r5 d  d- H( m( ]" N0 V

& ^! ]: H2 _( W: W) R        hr = m_pDisp->Invoke(5 a- a0 g! O2 i6 d; Q. L
                pokeID,) g  m+ @, d: F! T
                IID_NULL,
/ n" A4 R" y4 X* Z3 V3 Y# E' o                LOCALE_SYSTEM_DEFAULT,! E3 G9 _5 Z3 E  V* \( J3 `
                DISPATCH_METHOD,$ U1 V4 u0 Q' d; H9 q1 ]0 G
                &dp,
! K: Z, e8 a. A6 [                NULL,
6 g& _' f# B: J% Y9 G  j; N                &ei,* S( S1 V0 H: ^6 l3 o) J. [: M
                &uiErr);
) R0 U' E/ `( E+ e3 e3 v/ ^
- Y7 w( \: o1 b7 _/ O! M5 D+ e: w        SysFreeString(topicStr);
* @6 \, U& o6 d        SysFreeString(itemStr);- r" V' D8 Y1 V) V+ q( g6 R
        SysFreeString(valueStr);" ^# {- [8 K- x8 X+ K! j5 q

9 r9 {. g; Q1 l. e1 h' c" h) [现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???: n5 J) T9 M7 M4 m
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????4 J1 _2 n, n: }/ n& t$ k

8 l! P& |& X% s3 f6 z
- u0 c' g% {, [2.这是request的程序2 y5 W+ v- ?, X3 ?4 v6 M" B
//  Request a value from Extend
: i3 P* e8 E- _# [1 @, Z4 ?//% x4 |8 @) W7 ~6 m
//        Initialize the variant that will hold the BSTR.  Set the variant's
4 n8 u- K9 r$ k  ?, d' g+ i2 r//        type flag to indicate the fact that this variant holds a BSTR. Place the& Q" Q- ]' N2 f$ g$ w& _: m  O
//        BSTR into the variant structure.2 j( A3 R" D2 i

+ I7 T- K# k" P        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
2 }) ?4 b/ b% z: x% K6 J) \. g       
: ^4 t4 r# n5 Y) r# x- [" ?  c         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
2 H9 U  _& F2 r4 X) w# @        VariantInit(&requestVariant[0]); / N$ f' w4 ~$ T
        requestVariant[0].vt                 = VT_BSTR;
6 m! d' ]. J5 U% D; O        requestVariant[0].bstrVal         = itemStr;: O0 E) K' s9 [- D) Z2 ]
1 n3 H: J4 I! U4 q4 P% R, x# `
          topicStr                                         = SysAllocString((WCHAR *) L"system");
& @, o3 w( N& }2 X+ ?0 K        VariantInit(&requestVariant[1]);
& @, j0 ~- q# _, u3 l( l        requestVariant[1].vt                 = VT_BSTR;" e. J/ v, S% O8 S! c2 Y3 w
        requestVariant[1].bstrVal         = topicStr;
2 q3 R% G. M3 J9 M# z8 S2 F& y2 H1 o$ Z, F! E
//        Set the DISPPARAMS structure that holds the variant." c5 \: l9 |  y- T( B1 F0 }$ \

) v$ Q: x' w2 m5 f! t        dp2.rgvarg                                         = requestVariant;
0 s: Y8 Q" X) x8 M+ ?- K- A% z7 Y        dp2.cArgs                                         = 2;6 y) \$ m3 o) ]; u% x
        dp2.rgdispidNamedArgs                 = NULL;
9 |  D- z  i, T/ X, F. d& T; D        dp2.cNamedArgs                                 = 0;) i+ P- ^$ j1 h
( c6 R$ K" F6 ~; K" p
        var.vt = VT_EMPTY;0 M) o( X$ B4 F- j
; K6 |: `! K" k5 d$ U- x: H. r$ F, N
//        Call IDispatch::Invoke()6 B) b5 X, _( @: @; ]/ `
. T7 w- ^. v2 d/ k& o
        hr = m_pDisp->Invoke(5 ~5 t! {+ y7 ~" Z$ S
                requestID,/ ?+ x; x5 e1 g. {9 f
                IID_NULL,8 h1 e$ e. z  u. s# N
                LOCALE_SYSTEM_DEFAULT,
* x1 y  F$ w! m. U                DISPATCH_METHOD,
. r' H. n0 t$ r( r9 w- f5 n; M                &dp2,4 c: R- B! |, K& I0 t' L' a8 \
                &var,
2 `2 l/ F9 q2 S1 ~% Z* y/ L5 u. U                &ei,% t% Q: y- V% t5 {9 w) I5 |& ]" k
                &uiErr);
2 `0 ?, r8 n& ?6 A0 O; B& A3 g" n, |$ |" O' {- N! G1 ^1 Y
        SysFreeString(topicStr);% R" B' L- Z9 A$ s2 ^% c
        SysFreeString(itemStr);) n+ ?* M* K3 i% J4 ~- H9 Z
请问该程序是获得extend里面的哪个值?
' Z) N8 Q9 H2 H9 _; m如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-15 16:45 , Processed in 0.011845 second(s), 13 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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