设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9354|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:$ q* J* P+ ?, `- ^/ R- V" w" V+ v' N( S
Name = (WCHAR *) L"Poke";
* ?& J2 h5 [. x! x                
5 e: j9 R; u# s. I. B        hr = m_pDisp->GetIDsOfNames (
. H+ }& k4 s3 @; k. s2 i1 a6 t                IID_NULL,                                // reserved5 y$ [  v" E( G6 d# g/ c5 [
                &Name,                                        // Array of names to get IDs for& q: D/ \0 n5 G! Y& t5 \' V# I
                1,                                        // # of names in the array6 J1 j( G4 T' x! o
                LOCALE_SYSTEM_DEFAULT,        // System locale
. E! B- R% E; f# `0 w4 R                &pokeID);                                // Array of IDs to fill on output2 F; r' e& j" Y+ b: \7 j
                        ; _  U* A' H! f0 Z2 v- I
        if (hr)
# M+ r3 S' X: i) E8 ^% M- W                {( @# t' m4 i6 ^4 K" |, f
                MessageBox ("Get Poke Unsuccessful");! H, E2 P. Y/ j* T" v. k5 x9 a
                return;
. f3 T. d) Q, }: w! y& {) A3 G                }
3 S5 ^1 M9 A7 E* }! F, ?& C+ d( F: [1 H  s
/**************************传递数据给extend**************************************/% h6 O7 B0 z- f% B
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
8 S0 Z6 F: W& l* G" L       
! N* @7 f- d# z! R& m/ |         valueStr                                 = SysAllocString((WCHAR *) L"1232");2 |9 T) v) ~+ R5 |, \
        VariantInit(&pokeVariant[0]); " F6 y6 o% b. S9 j  K! b- [  w
        pokeVariant[0].vt                 = VT_BSTR;
! O5 ?0 ~! }0 Y        pokeVariant[0].bstrVal         = valueStr;' `6 v- f2 q2 V2 T2 V" z. ?
( V; D. ], B  t' G$ J4 u2 l
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");! L" B( ^* c5 p9 f6 g) ^
        VariantInit(&pokeVariant[1]); : ?4 i! z. B4 m
        pokeVariant[1].vt                 = VT_BSTR;
( O' C2 S5 A% E( d        pokeVariant[1].bstrVal         = itemStr;
) w& b4 N# n# {% H4 r, e  w8 _' N! r! f
          topicStr                                 = SysAllocString((WCHAR *) L"system");& P" L/ O/ d# `1 {$ ~  Y7 G8 B
        VariantInit(&pokeVariant[2]); : W3 R' s0 r  I
        pokeVariant[2].vt                 = VT_BSTR;
- G% G! s6 I2 u& C' |* l        pokeVariant[2].bstrVal         = topicStr;) m8 L$ I8 k1 l3 L% ~; p5 ~7 E/ O. x, I

8 z: D% e0 n; n$ Y3 v//        Set the DISPPARAMS structure that holds the variant.
- P$ g8 Y# E$ b# g& n
  e8 E" Q- ?' U4 O9 I5 P* {        dp.rgvarg                                         = pokeVariant;/ B# t  x! E! p2 ^
        dp.cArgs                                         = 3;- q& w2 x$ a4 a/ P' w+ A; ^8 Q* F
        dp.rgdispidNamedArgs                 = NULL;! u9 f7 A. ?$ l+ q( q* E8 [
        dp.cNamedArgs                                 = 0;, k' |- d# e2 t8 b. X8 V

, M8 |8 J2 m; }0 V' ~( j//        Call IDispatch::Invoke()
- a+ ~6 N7 d, K- K9 X5 h
% b. t7 D0 y: b1 ?; e! s        hr = m_pDisp->Invoke(1 J* `& i" N' ]8 b
                pokeID,
* ^3 O; ^+ R( [) T2 H                IID_NULL,. _$ t) o3 q; M+ T
                LOCALE_SYSTEM_DEFAULT,* `, Y5 W& D% M
                DISPATCH_METHOD,
$ j; n7 P" a9 C& Z( X9 m                &dp,* D6 W: |# J0 n* E; H8 S5 {: r
                NULL,0 E- f$ h' d. t( y% i
                &ei,
. M% M6 W  }: a# _/ P) j                &uiErr);1 x4 G( j8 b8 ]  Q
: B& R% R. A3 A  D) J8 B
        SysFreeString(topicStr);: D  d- O) P* N8 b/ o% u: v
        SysFreeString(itemStr);0 k. i  @/ ?; r% U% w8 ^! w
        SysFreeString(valueStr);' R7 Y1 e3 k5 `4 f

1 ]2 ?' X* ?2 N8 T9 {8 T; d现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???0 ^) y6 G2 m, L& d8 h& |. l% H
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
/ W- S$ ~- q- B" y) E9 M: m. D
" c' P& s) R0 v" v  \! |5 p4 V7 M( O; ~' U/ Q: G4 e& J2 o4 \
2.这是request的程序
4 z# P7 N- y7 L5 @: A8 y) i//  Request a value from Extend
7 L) G' |) Y" o8 I//& Y) d+ i) C4 O) \; n, x
//        Initialize the variant that will hold the BSTR.  Set the variant's
/ t8 r+ U% h8 v: S. u. i//        type flag to indicate the fact that this variant holds a BSTR. Place the4 P: T/ i: @' T, k; V
//        BSTR into the variant structure.
/ h* w: h" i$ P# L0 O
" ^0 e& e$ c/ W" F$ x        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
6 A' I& ~7 N4 |/ ^       
5 S; v, Z8 X: m8 B" z7 Y         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
8 X7 h& @& z  Y# v- W; c        VariantInit(&requestVariant[0]);
, s% O$ _; \" p% S0 b2 G& e. [        requestVariant[0].vt                 = VT_BSTR;! ~3 x% ~( O$ K2 ~. z! f
        requestVariant[0].bstrVal         = itemStr;
& s$ v/ G- z' e* N6 k4 ?
+ z. i3 |% O  ^# }* g          topicStr                                         = SysAllocString((WCHAR *) L"system");6 G" o' k7 T/ c8 i
        VariantInit(&requestVariant[1]); ! o# a( e  j! u1 g: P
        requestVariant[1].vt                 = VT_BSTR;! w  B3 D' y+ Q) Y  o8 g% E
        requestVariant[1].bstrVal         = topicStr;6 p2 W# O; A( _

" c* n0 d' e0 C: R" r" r5 Q) o% @//        Set the DISPPARAMS structure that holds the variant.: `  v* a) d4 G
* Y8 O; R2 _& {! ~
        dp2.rgvarg                                         = requestVariant;
6 K& i3 s* E; q% L! P9 M/ A6 ^" f* _        dp2.cArgs                                         = 2;
# i& [* Z' S' |        dp2.rgdispidNamedArgs                 = NULL;
! ~" \* o+ u( |5 ~0 \        dp2.cNamedArgs                                 = 0;
$ o. {& l) r2 _& M. U' f; w0 t" J* G. G" V8 K0 y
        var.vt = VT_EMPTY;) ~. q) b  ~1 H8 @
& C. [# ~8 M2 S3 B. k( l9 {! m" l" W
//        Call IDispatch::Invoke()5 |; W0 O4 C5 `

/ Y. f  S' m/ A/ U  ?+ k        hr = m_pDisp->Invoke(' T" b: j0 q/ I0 @8 M5 F. T5 ^
                requestID,
' C* C5 J1 j( b                IID_NULL,9 Z6 P+ \0 Z2 f; H5 k
                LOCALE_SYSTEM_DEFAULT,
: z8 F9 o# i* c+ W. t                DISPATCH_METHOD,
0 M+ j1 C* J# r9 k2 F" @                &dp2," F& `$ @$ x+ z% @- T
                &var,' M5 z  t& |3 p7 M/ s- r1 M
                &ei," x& N* [  ]4 _! ^! l
                &uiErr);
  D! |( |& ^: s! u4 w5 }3 U! F6 A& e5 K
        SysFreeString(topicStr);; A0 ^3 i* l1 t& i
        SysFreeString(itemStr);; n+ @' _% W3 K& \9 N/ e* L
请问该程序是获得extend里面的哪个值?
7 @, V: J. i/ R如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-4-14 12:49 , Processed in 0.019527 second(s), 13 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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