设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13003|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:7 U7 Q) s: U: l* b; P) C  U6 X! J
Name = (WCHAR *) L"Poke";( H- j7 V/ P0 u/ @
                 : C  ^) ~# R/ j3 u
        hr = m_pDisp->GetIDsOfNames (5 S: G0 x4 G' B8 D2 w6 U
                IID_NULL,                                // reserved
) X, Y. {5 U/ B, ~# e                &Name,                                        // Array of names to get IDs for& O0 G# S0 W" r( ?. q$ l
                1,                                        // # of names in the array
4 ]6 M/ K5 Q( ]% K" A9 y2 @                LOCALE_SYSTEM_DEFAULT,        // System locale
: ]! W! T6 G, ]1 S) G' w; S                &pokeID);                                // Array of IDs to fill on output; K$ Y4 }0 p; U; v1 F
                       
2 i/ s$ U2 w# q6 T* m' _        if (hr)
' i( h) Z! Z7 r& _                {
( O$ e" _, u! o. s5 f9 |6 J                MessageBox ("Get Poke Unsuccessful");, U1 @, k6 Q9 ^1 ?) {  U
                return;; O4 O, Y2 p0 e
                }
* D2 i2 ?, U% M4 l: Q
) w  y0 H1 L  g. A0 i) }' P' E: k/**************************传递数据给extend**************************************// X/ ?* K; b$ }4 x2 g: ]7 i2 S5 |9 x
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
4 g) E: z3 A: q) a7 x- D9 S        0 t2 C, V8 r# o
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
9 Q  h% J. W- S6 Z2 r1 ~/ C" z        VariantInit(&pokeVariant[0]); " w1 f' H" A9 R' h3 @# x) D* s- o3 M
        pokeVariant[0].vt                 = VT_BSTR;9 Z3 }9 n3 v* n6 W% ]* A6 L
        pokeVariant[0].bstrVal         = valueStr;7 a+ m, n) f# d" q, G

) l7 e: o- t$ _2 {         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
  w! j% {& h1 h% |3 r        VariantInit(&pokeVariant[1]);
9 q$ i' u" b1 J$ X        pokeVariant[1].vt                 = VT_BSTR;2 v1 n2 }# A7 b- W, M+ z! i9 [4 y9 A5 R
        pokeVariant[1].bstrVal         = itemStr;
' D0 S" ^9 S- ~! A" r2 w# p  Q, j, ?9 g( Z: E  ~1 @
          topicStr                                 = SysAllocString((WCHAR *) L"system");
$ s  x; _! M8 U  K5 k4 U        VariantInit(&pokeVariant[2]);
" ~( D0 F6 R' u& k& z3 L        pokeVariant[2].vt                 = VT_BSTR;  u3 V- _  a6 S; x2 y
        pokeVariant[2].bstrVal         = topicStr;
, K7 h: A, l$ y# r- [/ b% v
3 ~7 O! e9 O# z. c4 A$ E& ?/ _, S/ J//        Set the DISPPARAMS structure that holds the variant.
5 c: O% E! e; f$ M$ s, I
* h# a, Z9 {; V. ?% x1 p+ @        dp.rgvarg                                         = pokeVariant;
- x4 U/ W3 o3 L5 H' ]        dp.cArgs                                         = 3;. k6 N8 x3 F: _' z: D' I3 J
        dp.rgdispidNamedArgs                 = NULL;
& N0 m. }* w" A! X        dp.cNamedArgs                                 = 0;
1 `4 I4 m0 ]8 B$ i# L5 W7 b
" t' ^% T, O1 {) E//        Call IDispatch::Invoke()8 K6 u6 Z! k- I

( D/ [; {4 u/ f$ S# y7 c3 V        hr = m_pDisp->Invoke(. l  b8 Z. ]% J  j; D
                pokeID,, q; U; Q+ ?) P, N* Z# v( R
                IID_NULL,! o7 s; |0 M! W* x
                LOCALE_SYSTEM_DEFAULT,* O0 W% }3 ^+ k2 [
                DISPATCH_METHOD,, N- K8 H; D" B9 `& e
                &dp,3 F& N. V9 X3 L# d' p
                NULL,& J& U' H+ Q  L' f0 L
                &ei," @! `0 C- o, ~/ }' D4 g
                &uiErr);
6 n) Q, ?/ {+ M6 X# b4 c; X: L5 M! `) Q* x' J( d
        SysFreeString(topicStr);
9 x4 P5 I3 S; i        SysFreeString(itemStr);1 j; Z! b7 V7 h. D
        SysFreeString(valueStr);9 o7 V) ~% H/ x4 b5 z

! ]6 i3 O% T/ Y! b) _" J& F" v现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
: H$ X5 a2 j  \9 C0 u此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
3 p; Z9 u9 Z5 A/ L( ~+ K
* k* e& g# q/ F, T) b9 c/ r- F; n& M2 `6 f$ |
2.这是request的程序% o8 B2 O4 S# O7 V( R) e$ n
//  Request a value from Extend) M3 j' I+ U7 g# k  H
//8 y% l5 t) \: w1 }/ l8 `
//        Initialize the variant that will hold the BSTR.  Set the variant's$ ^8 L' l' O" s6 A
//        type flag to indicate the fact that this variant holds a BSTR. Place the- N; f4 {! J2 {% L
//        BSTR into the variant structure.' v6 z( J5 T2 S8 r0 J7 ]8 {* K
; s6 Z8 S$ `) U: p) n  t
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);8 y% ~; O% {3 P; \* ^
        $ i, C. P4 r: ?/ U0 [( G
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");6 r" }5 H$ ?2 z# P5 u
        VariantInit(&requestVariant[0]);
$ |* K$ i+ z) a        requestVariant[0].vt                 = VT_BSTR;" q+ `7 S, L# {4 G# ?7 b
        requestVariant[0].bstrVal         = itemStr;' w0 Z% b' l; {- A/ {( M4 E2 `  j
( k) I; n( }) l. L" B
          topicStr                                         = SysAllocString((WCHAR *) L"system");
' O' E+ t( w& u" C0 i. ]        VariantInit(&requestVariant[1]);
/ _' z9 h0 [5 _7 v/ _- A        requestVariant[1].vt                 = VT_BSTR;1 `0 b# e2 y0 [
        requestVariant[1].bstrVal         = topicStr;
% j' i# a9 Q+ c  }; D2 C: G# l
2 S+ c" o1 v% N* z0 S//        Set the DISPPARAMS structure that holds the variant.
7 ]8 L2 |$ p; R, c& I/ Q+ c" f/ ^* Y. C& L) J
        dp2.rgvarg                                         = requestVariant;
8 u' t; i- X2 c) I        dp2.cArgs                                         = 2;0 y( j, E* F7 I' M8 `
        dp2.rgdispidNamedArgs                 = NULL;# T. G" N6 w! U& y8 w
        dp2.cNamedArgs                                 = 0;" P+ l8 {; b% X# @  w5 j

- {# \+ ~9 C: q; h" C         var.vt = VT_EMPTY;
9 \' h) S3 P2 H; v8 `) i) u
5 @0 _7 X4 J; V( l5 G//        Call IDispatch::Invoke()5 ~$ N$ |4 H  A7 A, J, N  v6 B

, O' |: Y+ \: Y& d+ j& I        hr = m_pDisp->Invoke(
% R8 X7 ^. \. s$ |% a                requestID," U) \. {7 V8 k! q
                IID_NULL,3 k# x# |0 W8 p4 A0 ^1 r0 X. D
                LOCALE_SYSTEM_DEFAULT,
2 a+ T7 k* I8 B/ Y2 j                DISPATCH_METHOD,
9 \+ Y- B7 {' \# r; {                &dp2,+ H0 A" _# \0 ]0 a; O- B$ Q
                &var,7 R$ W8 a* s- C4 P) Y. M
                &ei,, C9 P0 C" Z9 r" ]* \
                &uiErr);' F, D7 \, w% j* B0 g, ^8 `3 l

; a  H! Q, h' j& p; R4 ~% |  S6 T        SysFreeString(topicStr);  G! q* R  q: T6 j' x/ [
        SysFreeString(itemStr);* J9 I, Q3 {- p; F9 F. Z6 {
请问该程序是获得extend里面的哪个值?' ~& `2 e2 B" B1 f2 p& q+ V
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-9-8 13:36 , Processed in 0.013396 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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