设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11208|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:: l3 N# G' c& v3 g, w( d
Name = (WCHAR *) L"Poke";8 i1 L5 T; k. t! ^& ]  [
                 ) Y: ]# J1 J# i& U/ j
        hr = m_pDisp->GetIDsOfNames (
# x/ B/ R  T! C7 s8 T                IID_NULL,                                // reserved
. g* R! {, J6 z& J+ [. E                &Name,                                        // Array of names to get IDs for6 }/ ]  z: N9 b5 y  t9 b9 X
                1,                                        // # of names in the array
  ~" o* f% I% C$ @8 r4 V                LOCALE_SYSTEM_DEFAULT,        // System locale
5 t; K" \+ R- J; b) ?0 M4 N/ a                &pokeID);                                // Array of IDs to fill on output: X/ e6 B5 U# t$ [
                       
$ v8 E- C" ~- d9 d2 D        if (hr). K- j3 K, b( w! u/ P4 I
                {
2 [  e. `5 i, t# A. P2 J                MessageBox ("Get Poke Unsuccessful");+ v( X3 `( |/ f
                return;, C1 K4 |! T0 `# {1 ^" n& x5 L& \% [
                }
, A/ H9 c9 g; R- T" O' v
. P% N: f' E9 ^2 g/**************************传递数据给extend**************************************/
6 r' y' u  v. m2 d! |1 v& S        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
# D, `+ ^7 k+ j$ J' C" p% a" P        , o/ O* m) U& T. [( V
        valueStr                                 = SysAllocString((WCHAR *) L"1232");* w2 P: b. g9 W" g" [. h7 ?
        VariantInit(&pokeVariant[0]); 3 z+ {' I# `, B4 g
        pokeVariant[0].vt                 = VT_BSTR;
& ?, o& e& _6 I4 l        pokeVariant[0].bstrVal         = valueStr;
% ^9 s7 A5 L( [! q  [0 ~) s# h0 d5 ]. Z
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");4 \0 b  }0 m% z. l; M# Y$ ?( ^
        VariantInit(&pokeVariant[1]); . b# Q' |4 Z2 H1 _
        pokeVariant[1].vt                 = VT_BSTR;! x: w% E. e/ z" F
        pokeVariant[1].bstrVal         = itemStr;
4 w7 B1 Y1 g- ]: P( V# `/ ?! t( m& \
          topicStr                                 = SysAllocString((WCHAR *) L"system");4 S/ e9 ?- C1 B
        VariantInit(&pokeVariant[2]); - b$ ^, k6 N% z
        pokeVariant[2].vt                 = VT_BSTR;
8 Q% V' o% i, l8 P        pokeVariant[2].bstrVal         = topicStr;9 S/ W) I! i) {

( h/ l( K/ [% N4 k6 A. T//        Set the DISPPARAMS structure that holds the variant." N" ~2 O3 [1 V9 c/ z+ i: ?
  H9 o  r. P8 [, t% [/ o; y% o
        dp.rgvarg                                         = pokeVariant;
2 A: z# ]; C7 G        dp.cArgs                                         = 3;; w$ L. g- O# E; x+ P
        dp.rgdispidNamedArgs                 = NULL;: ~) T$ E9 C+ p. H
        dp.cNamedArgs                                 = 0;
6 V$ @% Q8 a: u/ S' }9 F! o  Q' T* \" H# G3 b& k) G
//        Call IDispatch::Invoke()1 m  b5 O; J/ N

* U+ }' V. V: R. ?9 D        hr = m_pDisp->Invoke(- h- b& _8 @1 A1 Q; u0 H
                pokeID,
* b1 V1 }9 q! [" g' l: l- d6 Y" @                IID_NULL,
1 S3 i' r: e( a- t" q                LOCALE_SYSTEM_DEFAULT,
: z9 C& i6 i  Z, b5 n                DISPATCH_METHOD,
# A2 a8 U  v* b! E- K+ x5 v                &dp," L$ b; F% k. k7 m; A) B$ h
                NULL,
7 w* ~% o; ~- b8 P0 F6 e$ q' ?                &ei,
1 G$ A; W2 u6 t) M0 h8 @; z                &uiErr);
0 z' ?7 Z3 U5 w6 k2 k9 b/ ?# m, z
        SysFreeString(topicStr);
$ _7 X9 Q5 Q3 L7 l5 y5 }        SysFreeString(itemStr);3 L. r2 g% w9 k: d+ v# B
        SysFreeString(valueStr);6 T: M8 g& k( B; X& C
6 i9 A- ~; ?. [' f& R" X
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
) Z  ^9 r. K# j8 c1 d此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
0 i* A) |( G* i* |, T$ ^1 G* o* ^1 ~/ Y, J  W
6 I  K$ T. N, e* ^" Z( C
2.这是request的程序( A1 i. ^1 I% m
//  Request a value from Extend1 f/ w0 O0 d8 i7 I9 k
//  b) A4 l1 x% ?  J& y2 k
//        Initialize the variant that will hold the BSTR.  Set the variant's
- G4 ^; K( I' H% R2 D  s1 G0 t//        type flag to indicate the fact that this variant holds a BSTR. Place the
; j# I% H+ I0 C4 ?5 d/ N  q9 b: q//        BSTR into the variant structure.
" q! l, ^; y/ j* b9 @6 W+ O6 p9 s3 B* s. Z7 ^3 O
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);8 f  M/ i$ D) X
       
0 I7 J4 r  L/ c) ?3 z         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
: t8 }# y; x/ j        VariantInit(&requestVariant[0]); 0 l) [$ T2 h2 U0 {, @7 d# o3 v# L, J9 K0 R
        requestVariant[0].vt                 = VT_BSTR;
$ p7 x. Z4 ^: Z; u5 @3 ~: Q        requestVariant[0].bstrVal         = itemStr;, [% \! {- D9 Q# ?

$ K: x, G9 T$ O. y4 [+ ]; F          topicStr                                         = SysAllocString((WCHAR *) L"system");0 n, M; @( b9 D; f5 C
        VariantInit(&requestVariant[1]); , w; }& v- i( t! E+ ?" z
        requestVariant[1].vt                 = VT_BSTR;
" A- w- {+ p$ R8 A        requestVariant[1].bstrVal         = topicStr;1 M& |+ D3 _' v/ L# C( M) ~5 T/ U

/ E$ i; o* [6 n+ ^  E7 Q- q//        Set the DISPPARAMS structure that holds the variant.) ?$ o6 ^" ?" ]) u+ {& n
8 c5 s- G6 f) N, s: a
        dp2.rgvarg                                         = requestVariant;
0 ], |9 k: G& s0 \$ l% N        dp2.cArgs                                         = 2;
7 y6 ^( l3 j% |% u' ?        dp2.rgdispidNamedArgs                 = NULL;
4 \5 z* ^+ v; J( ]( |9 P        dp2.cNamedArgs                                 = 0;; w* W7 t) p1 k' w, J
. _2 _6 C0 u; o+ X. x( W6 T+ [; ]4 x) m
        var.vt = VT_EMPTY;
- O' \& }" [, w
/ R+ y) w; ~6 d% t! F2 ?//        Call IDispatch::Invoke()& D5 o, P) a. M6 ^# }
5 _/ J0 |+ U( ^; X- A  }- w
        hr = m_pDisp->Invoke(* x: b- ~- u+ b! \2 Q( o1 o
                requestID,& [5 k1 O( o( p, }
                IID_NULL,4 |( i/ S) H$ h. m# ~6 b) a
                LOCALE_SYSTEM_DEFAULT,
1 [  F) v; C- y6 d. H6 d4 L5 E/ l1 O                DISPATCH_METHOD,
: e" Y) A# J! @  ]; A                &dp2,' k4 L$ t4 v8 S) e6 D
                &var,
+ S: X$ [& Y7 u. R3 ]: n2 G* @# o                &ei,3 ^2 j7 [# M4 d! c1 B( G1 P' g1 e
                &uiErr);
+ h5 E9 I& _6 p& h6 Q. x6 V( L, m$ j! T- `4 {9 z  R4 Z' x
        SysFreeString(topicStr);7 Z' _1 G/ l8 Z& P- f
        SysFreeString(itemStr);
+ V0 i  P  U1 G4 f$ B' b& z请问该程序是获得extend里面的哪个值?
6 y! C0 T5 s0 F; z+ t2 m如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-7-1 12:20 , Processed in 0.017836 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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