设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12856|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
& i/ P6 p+ u* xName = (WCHAR *) L"Poke";
# ?! Z7 k" Z( S- l" v) ~                
: L7 k1 `0 i! a        hr = m_pDisp->GetIDsOfNames (
9 v  d" R4 z: u' W& ^                IID_NULL,                                // reserved" C! J# O9 h2 ?+ a* O
                &Name,                                        // Array of names to get IDs for
7 B5 B  N# E: a/ M9 W                1,                                        // # of names in the array8 B2 q$ z& {6 L+ R- _, O) b, i
                LOCALE_SYSTEM_DEFAULT,        // System locale- r6 w  ?* \: u) a9 C& ?7 R
                &pokeID);                                // Array of IDs to fill on output- d( d, v( V4 H7 a9 E" S
                       
8 _* T7 E$ f+ ?) c  Q        if (hr)# @6 W5 J( V" h0 ~
                {
  H/ k" H% x8 _) p                MessageBox ("Get Poke Unsuccessful");; ?( x5 g' r/ S( Y
                return;
: W: R. X( S1 `4 I* `                }
; l# ~' M, U$ r' U# d3 `" I& n2 g% l9 X! A, K6 P: C# [
/**************************传递数据给extend**************************************/
1 h- B4 Q; v. n        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);: c: c, r& C$ V9 c
        8 L2 B" [0 U; J4 ]  [8 B
        valueStr                                 = SysAllocString((WCHAR *) L"1232");. ?5 P- Z1 I) h: f  f, s
        VariantInit(&pokeVariant[0]);
1 [/ a  @: A& I8 }& }7 B        pokeVariant[0].vt                 = VT_BSTR;3 Q+ W7 t, X+ V' [) S$ g& X" _3 f
        pokeVariant[0].bstrVal         = valueStr;
/ T- z6 b$ \% z1 g
5 C2 M+ @# K# [; c6 U( y% k3 h) r         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
4 d9 h& v: w- U4 s% M# H        VariantInit(&pokeVariant[1]); 1 q; Q' M! T/ c. n! \9 M+ D5 w
        pokeVariant[1].vt                 = VT_BSTR;
$ l9 |* z; X0 O        pokeVariant[1].bstrVal         = itemStr;
6 K/ ~6 [- h/ A8 d. w/ v" B7 D) l) v# A8 F# C- ~
          topicStr                                 = SysAllocString((WCHAR *) L"system");
4 x! r  f6 r7 X6 _. I        VariantInit(&pokeVariant[2]);
. r3 x; F* F! @, k' G/ r: ~# A        pokeVariant[2].vt                 = VT_BSTR;9 n# `8 H+ I9 j# q. W* w
        pokeVariant[2].bstrVal         = topicStr;' z. Z& t3 V/ \
- S# n3 H1 D- Z5 b6 g  I# g
//        Set the DISPPARAMS structure that holds the variant.
4 k' v: S( E, B) _  `1 e
% Q' g+ y& F- i- q: _" P        dp.rgvarg                                         = pokeVariant;. x, \* t# u) e; D  f7 s; t
        dp.cArgs                                         = 3;( B1 |& Z) h% R5 z  H- Z
        dp.rgdispidNamedArgs                 = NULL;
; K8 w  h* w/ C        dp.cNamedArgs                                 = 0;
& Q9 E7 \9 z8 l) K4 J' e& P) i( ]/ }4 ]
//        Call IDispatch::Invoke()
" q+ U1 g" ^: N0 N
% B* N$ g$ b1 q& X, @- @- ^        hr = m_pDisp->Invoke(/ O+ \$ v( M3 r
                pokeID,$ i( d+ z; p+ Q3 }4 g- P
                IID_NULL,
7 q3 h9 T+ i, ]: U, T; o+ `" G                LOCALE_SYSTEM_DEFAULT,
% F7 A  r5 @$ r                DISPATCH_METHOD,
5 g0 H0 R" B; ~& R! S                &dp,( _2 q4 j- U- G( S
                NULL,
. {5 ?$ b# f1 U: a& T5 n4 b* z% l* J3 m  K                &ei,
9 Q2 h" F2 W( l; F                &uiErr);
9 N0 B" a$ @/ K: j/ O0 |" b1 ^' h% s/ f& v
  H1 k( j; P6 w3 W6 C  x5 J! U        SysFreeString(topicStr);
! V6 X  L2 r* ]        SysFreeString(itemStr);
9 A1 V. B* x" w: R' D        SysFreeString(valueStr);
5 E4 }) r0 x. }2 }+ d# H  a1 |# [
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
" R) |7 x# ?1 ]; ~' X此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
0 u" n/ b( f3 @# k/ G! o
' H( M) \$ T2 @3 z' ?; D, w# L; }6 B1 ~: q
2.这是request的程序
* d, e8 Z. D, d* {5 _7 n$ v//  Request a value from Extend4 d2 d1 ~; F$ ?; ^, O
//3 l0 U. }$ F. |- U
//        Initialize the variant that will hold the BSTR.  Set the variant's
0 J! `+ M$ C. F2 f; h//        type flag to indicate the fact that this variant holds a BSTR. Place the% }% g9 B7 C7 R, P
//        BSTR into the variant structure.: ?4 d' v# ?4 H* [
. K9 i- T% R( U2 m- T
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
% G( O4 p+ ~5 z) C  \. n        ' o7 \" T1 p* I: m4 B; n/ V
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
6 P/ _6 @& T: l0 X  m1 h        VariantInit(&requestVariant[0]);
  l9 Q6 l+ S( I! x5 L, H& x        requestVariant[0].vt                 = VT_BSTR;
; i4 f5 N. H2 S( N& s        requestVariant[0].bstrVal         = itemStr;$ V; P9 l/ P0 L$ i' I2 q
0 C; C2 C* R4 |8 B" S
          topicStr                                         = SysAllocString((WCHAR *) L"system");8 X- D( J$ a1 I' Y& U( I
        VariantInit(&requestVariant[1]);
5 e: o: m7 _( J- g        requestVariant[1].vt                 = VT_BSTR;
$ b, ^& C7 s+ ]/ Z) ]        requestVariant[1].bstrVal         = topicStr;0 g1 v! H& N! u3 j1 x$ E

' h- Y6 W' @- w- M) }  f& X0 t) G//        Set the DISPPARAMS structure that holds the variant.8 {; Z; U& }( L& P% s0 H& ^8 e9 Z

, m% W" G* `+ z6 }0 ]6 t        dp2.rgvarg                                         = requestVariant;
6 N. S5 K4 {9 G# y3 a- ^( }* T        dp2.cArgs                                         = 2;1 \. M7 G, d# k8 Z' `3 H: `$ N
        dp2.rgdispidNamedArgs                 = NULL;
) ^9 x/ y# z1 G% g3 S        dp2.cNamedArgs                                 = 0;% s/ s2 u2 W/ @' T
, w# G# p5 G; T4 A
        var.vt = VT_EMPTY;
* j! L; A( t; u* b7 f$ L9 r/ L) y2 [4 q0 r/ B2 Q) U
//        Call IDispatch::Invoke()
3 U7 ?5 s- c$ x1 Q6 |2 P: G# ?
8 ^0 u$ x' e' C6 m' B1 \        hr = m_pDisp->Invoke(
, x( l8 m. p9 o2 p                requestID,/ o6 R9 ?* g, e( _! K( ^
                IID_NULL,
6 g) J) E' z( i: S9 m+ D                LOCALE_SYSTEM_DEFAULT,
% q% A! q0 e  F5 ]: e                DISPATCH_METHOD,
) t3 F3 e) U( [                &dp2,
# r1 E; ]7 Z2 t" E  I9 ~: O5 i                &var,5 j* L3 `* d+ N5 t
                &ei,, Z% o7 s* i6 Q/ b. Y* f
                &uiErr);
& d! {- @" `$ r* m4 U; h0 n5 v5 D$ I+ }( ]3 T& u
        SysFreeString(topicStr);5 n8 T2 m8 o% u7 B. \8 p  i# Z7 X
        SysFreeString(itemStr);. ?3 S3 Q5 S" v) t# y
请问该程序是获得extend里面的哪个值?
/ x! O9 W+ s# ]  I* h如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-9-1 18:40 , Processed in 0.014021 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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