设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9944|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
; I3 V& h5 J: yName = (WCHAR *) L"Poke";
% F0 b8 X2 V" M) y/ @                 3 _# g% I% J0 ]+ [/ P
        hr = m_pDisp->GetIDsOfNames (% P: q! `5 Y# y& _( [
                IID_NULL,                                // reserved
8 A: ^  \. }* Y! q. n3 N# W7 c                &Name,                                        // Array of names to get IDs for
/ g9 E# K* i2 J* T+ y" R& C& A8 g                1,                                        // # of names in the array
% B8 z4 n. R' i3 D" Q" X; w                LOCALE_SYSTEM_DEFAULT,        // System locale; q3 C' k: d( E) @% I
                &pokeID);                                // Array of IDs to fill on output( b% p! ]# q9 ?! S- k
                       
0 U5 N  J& S0 y7 [( K3 j        if (hr)
+ T3 J7 L: x" d# ~5 o                {
! n, L% h2 ^! `                MessageBox ("Get Poke Unsuccessful");) u  R0 \( k/ `% _3 {  [: q! P+ ]  j
                return;
: D$ g, \+ g" `4 ?# ~6 @7 _# Z                }" J& b9 J. ~5 U+ m" A1 }6 j9 l

4 K  x  y- ]1 k/**************************传递数据给extend**************************************/8 E' x& y6 O& i- y+ _, ^
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);3 F5 e- Q& A# `# n% W9 N2 l% Z
       
) }" ~8 u+ z8 a# p         valueStr                                 = SysAllocString((WCHAR *) L"1232");: v) e0 E; M6 ?* ~- k
        VariantInit(&pokeVariant[0]);
( a* O4 L( ^$ [9 \, o        pokeVariant[0].vt                 = VT_BSTR;
( I: |! o5 M4 T) J( q1 r6 E        pokeVariant[0].bstrVal         = valueStr;6 r6 w+ A% u. E6 ~8 y+ k7 g* H9 E
( Q6 o& f) s1 |+ x6 ^
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");/ H! R0 B3 o! J& b3 {
        VariantInit(&pokeVariant[1]);
4 M' `5 z+ `- G6 r( N" \' x( N: Z        pokeVariant[1].vt                 = VT_BSTR;
4 j' ~. v: \# f8 n& j$ P4 A        pokeVariant[1].bstrVal         = itemStr;% `) a, p7 u# X7 \9 V2 D6 {
, o( B' _$ v, m7 _: l
          topicStr                                 = SysAllocString((WCHAR *) L"system");
5 P( ]0 e4 x2 m1 u6 ^/ M; O        VariantInit(&pokeVariant[2]);
0 k0 M: l7 z7 U( p        pokeVariant[2].vt                 = VT_BSTR;6 i4 \. K! q( j0 ~
        pokeVariant[2].bstrVal         = topicStr;
" r& ]9 N" `6 T. E
& X' E5 F- [- @: V8 \& e9 D//        Set the DISPPARAMS structure that holds the variant.
0 k- C: l2 C6 o; q% ]- M: i* K% M
        dp.rgvarg                                         = pokeVariant;
# _6 @2 z$ q  X3 X# P5 `! e        dp.cArgs                                         = 3;, P/ n. B6 T1 V* l+ L" n
        dp.rgdispidNamedArgs                 = NULL;
) }. @/ |9 \) G2 F5 d* y# O4 K' `: N+ v        dp.cNamedArgs                                 = 0;
6 @& h0 n" C- E/ p0 r
$ a% a; F. y0 g) Q3 E4 @; p- `- C//        Call IDispatch::Invoke()) k. I& O5 e2 F; m4 c8 @$ h, h
6 q1 d4 a/ h0 e. y  g, l
        hr = m_pDisp->Invoke(( m  q3 d3 ^( L
                pokeID,! V/ Z" r$ S# n( [' ]
                IID_NULL,
9 e1 A1 W' y. L2 y8 M                LOCALE_SYSTEM_DEFAULT,
' ?- Z! ]: f$ y% E: ~; N! I                DISPATCH_METHOD,
& f% y" ]$ d$ P" E6 `* a' p& a+ `9 y                &dp,
$ q2 p, W1 l+ s% R& n/ D" V9 [6 p  J                NULL,
9 V. d: {% A4 Y! q                &ei,: x% r# t8 [+ @. d
                &uiErr);
. S, u2 q' H% h1 E
+ B; L! L. G$ j- F6 f+ K+ n( [; S        SysFreeString(topicStr);
3 `: r; X" e6 i! Y9 l# D. Z4 E* R' [3 g% P        SysFreeString(itemStr);- B4 ]& H/ h! y/ F4 ~& K6 [1 k
        SysFreeString(valueStr);" I3 C$ V0 O2 k: d. Y/ X* ?  W: U

7 k0 W# B4 a8 T5 A6 \9 O: k' L现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
7 L& k3 j( @) I5 Q/ z7 R3 \此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????' ?; c+ ]! c( W8 Y3 W  C6 L
; P8 H# U: G0 D3 h
# B. F. D0 r  b, c( \- K4 H2 c0 }
2.这是request的程序; v5 e$ K; p1 K9 b$ f
//  Request a value from Extend
' B& [; A* _% T9 }( ?- u//
5 h$ J* ]0 D# [//        Initialize the variant that will hold the BSTR.  Set the variant's3 i" t! ]" U$ [4 V( B# z* ^
//        type flag to indicate the fact that this variant holds a BSTR. Place the
: x  h2 ^* v/ O) |7 u//        BSTR into the variant structure.7 K7 {5 s( B5 h! l
4 `3 n% s! E9 N- n) f! V$ j5 n
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);, `- P1 [1 ]$ I; |$ x- T
        / t9 {& v- B/ f, O8 _
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");3 p4 T- t; Q* O2 Q
        VariantInit(&requestVariant[0]); . c. j; h6 u/ n0 W
        requestVariant[0].vt                 = VT_BSTR;+ m  z9 ?$ B9 F& b9 l% V
        requestVariant[0].bstrVal         = itemStr;
4 g0 G0 V/ `! l
6 @' v) i* c/ a          topicStr                                         = SysAllocString((WCHAR *) L"system");
9 \5 U  J+ \0 U1 F/ p/ y7 O7 V        VariantInit(&requestVariant[1]);
* c$ m8 ]: n3 N1 B        requestVariant[1].vt                 = VT_BSTR;
$ x  R, u- n! L/ A7 a# [        requestVariant[1].bstrVal         = topicStr;
  j5 E/ ]" n# h$ I% `; W# N: q
" W6 E8 [. B* u. i3 P//        Set the DISPPARAMS structure that holds the variant.
+ V. f5 {& `& _* i( A2 C8 N; }; W
9 P; V' }% u& _) R$ A        dp2.rgvarg                                         = requestVariant;/ @& x/ X6 j/ O) T$ ^  g# `8 R
        dp2.cArgs                                         = 2;$ y( E: B4 t3 `) R- q! d0 Z
        dp2.rgdispidNamedArgs                 = NULL;7 m" ~6 h2 w7 b5 O4 T
        dp2.cNamedArgs                                 = 0;) A2 O& Y  ]% M. Q& B

8 T1 |" G& F+ }! P+ x/ ^  F         var.vt = VT_EMPTY;
! f- y" |, a, E5 j* d& w: u) p& O( e* x  R+ ?" T0 P& G
//        Call IDispatch::Invoke()
5 \7 }# b2 [9 E! y* r  M8 P: }! W2 L& T
        hr = m_pDisp->Invoke(
1 P5 \6 A6 `$ T9 a. _0 B  P                requestID,
/ I# T. W* K  {8 l/ B                IID_NULL,
5 p( L* d# v7 z7 b                LOCALE_SYSTEM_DEFAULT,1 C6 O: z/ A7 Y2 s
                DISPATCH_METHOD,- Q8 N) b% X3 ~# A1 p5 ]6 M7 n3 x
                &dp2,
! l) Q* b. d' e: w2 P. H3 o                &var,2 n* h5 y6 p' g/ f) r6 t
                &ei,7 g1 P/ F& x* G( |
                &uiErr);
. s- [1 ]* w: G5 o, K
$ A! l; o1 _  w, }) w  n8 E        SysFreeString(topicStr);
) j- c+ {9 w& G4 u& G        SysFreeString(itemStr);/ p. ^# s( |  a
请问该程序是获得extend里面的哪个值?
5 ^4 v  \+ v* F) \8 y8 s如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-6 07:53 , Processed in 0.017050 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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