设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9433|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:- `( h; ]1 c1 C7 b! a5 a; Q; `
Name = (WCHAR *) L"Poke";/ Q+ v, i: b. K. s
                 $ [! |0 R4 n% X& ?
        hr = m_pDisp->GetIDsOfNames (% G+ I. v2 ~8 X, U. }; v
                IID_NULL,                                // reserved
9 z& y) m, X  Z. c3 D, E% w                &Name,                                        // Array of names to get IDs for
1 R& B* N+ E5 @4 `$ }                1,                                        // # of names in the array& Z$ D8 H! h' x5 u9 t
                LOCALE_SYSTEM_DEFAULT,        // System locale
( Q1 ~1 o1 E. |- O$ ]                &pokeID);                                // Array of IDs to fill on output/ `$ H5 G& e0 B
                        7 Q) T4 C2 o# V( q: W$ I# @6 y
        if (hr)
6 ?& ^3 @  ~4 H1 c; X                {& j( P$ ^  B9 W. U/ _! B
                MessageBox ("Get Poke Unsuccessful");
8 J5 q* y8 q  Y* ~+ {' s9 H                return;
8 N# G. N" S' D- _: m3 p8 R                }+ I- r" |5 D! I( S& y# s) F

: C" h) h8 t/ C/**************************传递数据给extend**************************************/; l) o3 Y6 F1 `
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);3 {' X4 f1 n. F' [! H6 N
        1 z3 V' n% t9 Y# m8 X# I. g
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
1 D) c7 E; [* z+ l2 e        VariantInit(&pokeVariant[0]); + k0 x* D' C3 ]& T& l$ b) ]
        pokeVariant[0].vt                 = VT_BSTR;
# f  ~4 @. U/ {( I( |        pokeVariant[0].bstrVal         = valueStr;
1 f: a$ {: t7 E  d( S! n0 e1 K; O& t* Y$ t7 a( m1 _8 c: g
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");, L( }0 u' t4 i+ W3 M* t* b+ s
        VariantInit(&pokeVariant[1]);
$ \: r3 S/ F7 D" i6 v, X        pokeVariant[1].vt                 = VT_BSTR;! u# P1 N5 N2 L, Z# G' I: E
        pokeVariant[1].bstrVal         = itemStr;- L! e. E* R- v; K* r0 b  S% X0 F7 T

  }; q# C' H$ w          topicStr                                 = SysAllocString((WCHAR *) L"system");
7 I% N/ \+ E% J        VariantInit(&pokeVariant[2]); 9 Y0 v/ O$ i" w6 p5 v) O+ Z- g
        pokeVariant[2].vt                 = VT_BSTR;
6 s+ g" M( R8 C/ k6 }9 [        pokeVariant[2].bstrVal         = topicStr;
; j9 P, D% k8 h5 }# \: x+ q* t7 B' G, [! z
//        Set the DISPPARAMS structure that holds the variant.9 l' I' Y6 i7 Y
0 P; N* y! @+ d* L0 k
        dp.rgvarg                                         = pokeVariant;4 l: e4 l" s" n8 F. X2 C8 L
        dp.cArgs                                         = 3;
9 K2 W: @+ `5 i! p6 Y" ~        dp.rgdispidNamedArgs                 = NULL;* l  r+ O# T; y+ B  M& ~
        dp.cNamedArgs                                 = 0;
$ k0 C7 s$ i9 t5 K
  M5 b  k" k+ X- `* b//        Call IDispatch::Invoke()" a& {, V! t( m( {% j9 p+ O  S
/ g' [, l2 K/ ]6 a/ V% z# L
        hr = m_pDisp->Invoke(
" c# j) }7 m1 i' ]                pokeID,
) n' h+ ~  y9 Y! E                IID_NULL,7 R' p: s8 D0 [1 B& {# s
                LOCALE_SYSTEM_DEFAULT,. L2 u9 N: O; G1 k
                DISPATCH_METHOD,+ O: j. R/ b( R, m9 M, M
                &dp,
  H6 f+ n& ~! P% y0 P8 e                NULL,2 c3 b3 ?3 u0 A. g0 F. D
                &ei,: _+ d, _- ?$ W2 s5 K/ l
                &uiErr);  ?4 e1 h! n9 S) g$ Z
2 f& z& W5 n' r4 s' c4 g& v
        SysFreeString(topicStr);
: y1 D" [" V4 `$ g        SysFreeString(itemStr);' h# _* _& n0 F; |
        SysFreeString(valueStr);/ O9 S: l, B/ O+ n4 W! L

" i0 ?5 t% n# l现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
  F: k: g# k6 t, N此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
/ D' C: a( Y+ j3 T
3 s+ x; _& i# U1 r7 o: n! N* {
4 _) \7 {% {  B2 U+ Z2.这是request的程序9 Y7 v2 I4 K* ~1 |
//  Request a value from Extend; h* M4 D, g. a* y( r0 n+ V
//
1 Y1 y, p- B' B//        Initialize the variant that will hold the BSTR.  Set the variant's
# d% p# D, J# a  V4 Y2 @//        type flag to indicate the fact that this variant holds a BSTR. Place the
' @; J! \4 {/ y  j2 j1 g: X& t( ~//        BSTR into the variant structure.
# W$ S/ C; E# _- K' g& d" M: ^$ u2 z; `2 ~
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
0 Q8 n5 b7 x9 Z8 e+ S  d- H* p, B2 V       
6 w5 O& o8 D- f. A! F         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
, M$ p) X3 {9 B        VariantInit(&requestVariant[0]);
2 G8 p7 r4 N0 N9 n: N        requestVariant[0].vt                 = VT_BSTR;' u/ f, V3 j" N% \
        requestVariant[0].bstrVal         = itemStr;
) \3 q' M, P/ {1 C, W! V% m! v& W3 l
          topicStr                                         = SysAllocString((WCHAR *) L"system");" \) M9 N! U7 U) l
        VariantInit(&requestVariant[1]); 1 A. c; U* S, V0 \% Z: g! @
        requestVariant[1].vt                 = VT_BSTR;
8 k0 C: a' n; n" E. y+ M        requestVariant[1].bstrVal         = topicStr;5 Q3 F$ w! F1 a- k
# U6 }3 `) o; d1 I2 ^4 N4 A
//        Set the DISPPARAMS structure that holds the variant.
2 b. A/ a! ]+ t3 C1 X0 q; o  i- b+ m) K& W
        dp2.rgvarg                                         = requestVariant;' ^1 @% B# v  t9 ?( ]% l' p3 S
        dp2.cArgs                                         = 2;
9 j  i- x  Y. G5 d6 B" p        dp2.rgdispidNamedArgs                 = NULL;7 |7 }3 G% Q0 k  W1 R
        dp2.cNamedArgs                                 = 0;
* T8 Y$ A' T# D3 \& C8 ]4 l. z2 t+ O. h
        var.vt = VT_EMPTY;
( V" @/ V- p! F( W( U, ]/ D9 c6 t( R
//        Call IDispatch::Invoke()
  |' ]( e6 i) U) q$ X2 b1 G: O$ x  r
        hr = m_pDisp->Invoke(
) J& A, e0 i3 {                requestID,
) S5 u8 R4 w' u3 |. M9 `9 N$ P# i2 i. L                IID_NULL,' h9 I* C- [; c/ ~
                LOCALE_SYSTEM_DEFAULT,
# N! a: b, f8 ?9 b$ T                DISPATCH_METHOD,8 ]3 v1 u# k4 {( C
                &dp2,9 z" L. F! T0 S; P' H5 z
                &var,
7 y8 N: v; M8 q) C. K                &ei,
: |6 h% X# z  p                &uiErr);
3 k5 z& L5 B1 _, r0 }" ^0 n
6 s, q0 d2 j3 d7 F0 ~& M        SysFreeString(topicStr);
5 B, t! U+ Q2 ^) N; |6 [$ y        SysFreeString(itemStr);  b5 j3 q' ^! _" f) f
请问该程序是获得extend里面的哪个值?3 d& u: T  q- g: W
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-4-17 18:02 , Processed in 0.012331 second(s), 13 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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