设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12923|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
; e' a0 M3 E5 P# X% t. r& Y. Q. iName = (WCHAR *) L"Poke";  T7 J; \  t* g
                 ( @/ r/ B% V2 t9 H6 U
        hr = m_pDisp->GetIDsOfNames () |( k3 G4 G, G3 x. K
                IID_NULL,                                // reserved' A$ @  g" i3 ]& i. N
                &Name,                                        // Array of names to get IDs for& c/ f+ I( u/ C5 P2 ^
                1,                                        // # of names in the array
$ u, `) k7 J, ]1 c8 T; l2 n                LOCALE_SYSTEM_DEFAULT,        // System locale
" b# `  j1 [$ c; y+ D                &pokeID);                                // Array of IDs to fill on output/ A4 b  _) Z3 P% a2 Z+ `6 p
                       
2 G) m1 [/ D3 g) _4 [        if (hr)7 c$ g8 ~( R3 M/ o/ x" o2 l3 p
                {4 F# h# d( r3 [% T  C# C# `
                MessageBox ("Get Poke Unsuccessful");
1 `( I  D. ~- ]9 x% n' _                return;8 o+ b5 W' `, d9 M# ?* W
                }! c' O* m4 x! D& X* p, F- n/ v" u6 W

2 Z/ v0 b" Q2 a3 r& q/**************************传递数据给extend**************************************/' p# {5 c/ L& _1 c5 q) y; i
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);/ N0 m5 Q- U$ M9 b9 _6 j) f  ~
       
8 N0 M5 E3 ?) v; h/ V+ A; p6 O3 X" Y         valueStr                                 = SysAllocString((WCHAR *) L"1232");' e9 s9 s' f; u) E- m
        VariantInit(&pokeVariant[0]);
- f* g% @, H& J" P$ S        pokeVariant[0].vt                 = VT_BSTR;
. c: s* V5 `# v) F* @2 C        pokeVariant[0].bstrVal         = valueStr;
' H% n0 x6 i+ ^: y5 e9 a8 X4 _
: I8 q5 M. M8 V3 _) S6 C% n         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
- i0 M0 X" Z% x3 b1 ^, f        VariantInit(&pokeVariant[1]);
- j5 z0 C+ w3 I9 y6 R/ ~        pokeVariant[1].vt                 = VT_BSTR;" t; B5 n8 C7 u6 U2 I2 u3 @' m6 k
        pokeVariant[1].bstrVal         = itemStr;$ n3 Z2 N( p# u8 v

2 G' M" G. u  X. L! t- I          topicStr                                 = SysAllocString((WCHAR *) L"system");
& A8 d; I* k1 y. A4 W2 W7 }3 w        VariantInit(&pokeVariant[2]);
% l1 C. F% A) c  h+ C, v        pokeVariant[2].vt                 = VT_BSTR;
9 V) ^. Z6 ~1 c# k$ C2 G        pokeVariant[2].bstrVal         = topicStr;
/ R% a2 l0 E! m$ j6 V
4 m* ?3 w- [7 X! ^4 K//        Set the DISPPARAMS structure that holds the variant.
. g. }! `. f9 l; O* f7 A7 H5 R7 l7 v, D' P/ M
        dp.rgvarg                                         = pokeVariant;
+ f- K3 B/ i! @+ j. U' I0 ]- Y" J        dp.cArgs                                         = 3;3 X. z9 F- ]4 N) |
        dp.rgdispidNamedArgs                 = NULL;( H8 c! E: ?* S1 R; o
        dp.cNamedArgs                                 = 0;* f3 r( U  ]. w/ l( U0 U' _! y
: l* A% ^% E; g7 a9 X( S! r
//        Call IDispatch::Invoke()5 @/ H) J4 |, o5 O

5 v5 t# p3 K, }  l) T        hr = m_pDisp->Invoke(, U3 v  L+ O( ]& _+ |( H
                pokeID,% x' S" H  K/ L4 K4 t& E) ^) n
                IID_NULL,9 c- s& U+ r- {* |' ~% O- _3 R& ^
                LOCALE_SYSTEM_DEFAULT,
9 V0 Y/ i4 p) Q- ]$ Q                DISPATCH_METHOD,# [' Z  K5 Q# X8 C5 x6 A2 k$ `
                &dp,) h# w0 ?* i9 r& ]6 @* @
                NULL,
7 K$ k2 m7 P* U5 K3 ^; s" e                &ei,
& k/ j# T: K  c$ H/ b6 f: P6 ~: u                &uiErr);6 g$ l1 U& f9 Q- X0 v; Q4 K: b
' I+ h  _1 x$ k+ [- O
        SysFreeString(topicStr);
0 S+ V& S, X; R: W4 d/ \) ^# G        SysFreeString(itemStr);
1 T" c! u# G& L. u* R, I        SysFreeString(valueStr);
- f. e4 Y; B' {' p  d% n1 j
4 N- T# V6 z) C, H0 p4 i  ?现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
2 E  r2 F! d5 Q' g此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????+ I# ?( d( ]- ~; o- J! s

% k8 O2 ]4 Y, [- u& m, `* o0 y5 E9 d" C: E3 F) c
2.这是request的程序
, I7 f& I; _/ S; h//  Request a value from Extend
# M, m2 a' c2 w//9 J, v& I+ [( P( i* g
//        Initialize the variant that will hold the BSTR.  Set the variant's8 q8 [9 f- f+ M: B) \
//        type flag to indicate the fact that this variant holds a BSTR. Place the6 H& c+ L# b9 f2 K* ]0 H
//        BSTR into the variant structure./ _: ?6 \1 ^! ?2 }  f7 ~

" X) h: ]0 E( B+ j6 K        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
. D* C5 A) H  j8 c       
8 o1 X; y# H( o2 k8 s         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");' F4 G: E" @; N! R0 {
        VariantInit(&requestVariant[0]); & v& Y3 e# d* W* U
        requestVariant[0].vt                 = VT_BSTR;
- _* w# u" ^. W1 y5 V        requestVariant[0].bstrVal         = itemStr;
; ]5 S. t/ i. j: W8 h
3 B* j" w; N# U* e8 E+ P5 x; [          topicStr                                         = SysAllocString((WCHAR *) L"system");
: k" f; q* X3 Z/ }( ^& F' E        VariantInit(&requestVariant[1]);
7 `8 P, x- i) x. i* b4 o        requestVariant[1].vt                 = VT_BSTR;
( K% d* J* D+ C7 A/ {        requestVariant[1].bstrVal         = topicStr;# |2 u4 k  b& `! i1 i! B
+ u! l' g* b& [2 V5 e4 u: U
//        Set the DISPPARAMS structure that holds the variant.1 k5 [( F" ^/ w, U4 \
8 o8 B, n3 ], r: \
        dp2.rgvarg                                         = requestVariant;1 L) W* b0 I: x& H
        dp2.cArgs                                         = 2;8 c) W+ ?" ^& t% E; x
        dp2.rgdispidNamedArgs                 = NULL;
. F6 e. G& k2 u! @/ ^  [8 H/ f' u$ s) G, X        dp2.cNamedArgs                                 = 0;
. p( S: i8 t, X; ^: p2 s# J+ F" s+ V  [3 H/ o( Z$ x' P& L0 T6 \
        var.vt = VT_EMPTY;: @8 L) s6 h+ ?# f2 ?  Q
. D% q; t! t* A
//        Call IDispatch::Invoke()/ T* Q4 H* Z2 u8 Y. S! h4 w

, e( `* P2 p4 e. m6 T/ X$ L- X) a7 P9 ^        hr = m_pDisp->Invoke(
3 A" Q0 _& O& r3 N0 a% R: v' ?$ }6 @                requestID,; b3 I" |# ^1 k! @
                IID_NULL,
$ F' ]) {/ U, ~% }7 s0 a" _7 E                LOCALE_SYSTEM_DEFAULT,
1 \; S( I+ w) V. D+ i4 Y                DISPATCH_METHOD,3 j. `: h5 W6 {, y$ E
                &dp2,* p9 ]* _2 t) ]- t# G! }& G
                &var,
; p+ m3 o% [' Z7 K4 y                &ei,
* z3 Y4 u8 g2 X                &uiErr);% j; f5 G0 g% k# W8 |; C' b) o# u
* g6 H6 z- t. E) k1 H- q/ f6 W& C
        SysFreeString(topicStr);( A' F+ i- i6 F9 A8 `
        SysFreeString(itemStr);9 ^" r' L, @: V
请问该程序是获得extend里面的哪个值?" y/ r/ q6 y0 P* @" [
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-9-4 12:31 , Processed in 0.015605 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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