设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9951|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:) r2 L! B! J& A; N; D
Name = (WCHAR *) L"Poke";; c7 ]9 j* t2 K* Q9 u$ H& u7 X" ^; f
                
$ L5 J! J( ~- k" A0 a/ y        hr = m_pDisp->GetIDsOfNames (
9 W3 Q% r  N- k! A1 f. t                IID_NULL,                                // reserved9 {( m0 \1 s! q* D$ W7 c
                &Name,                                        // Array of names to get IDs for
1 C4 ^5 \5 V6 H+ ~                1,                                        // # of names in the array- Z' H: A* Y& Q" P2 |. ]9 i
                LOCALE_SYSTEM_DEFAULT,        // System locale5 k/ Q. R& L3 k+ }0 y
                &pokeID);                                // Array of IDs to fill on output
( c6 y' r! }+ `( a) t0 Q& |                        6 J+ m! K( F- E. J
        if (hr): m. R4 F; O0 Q
                {' h$ v# y; Z  r+ B
                MessageBox ("Get Poke Unsuccessful");
8 `: a# b& ]$ l& @( P                return;6 |4 `% H) P5 z3 n/ _2 ~+ q- `3 i
                }0 y: u8 [# H- L7 g+ R

) o( {  p, b* d. ?- [! o; N  d/**************************传递数据给extend**************************************/( D$ g0 Z" `* P' i- G
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);% f) i. Z( T; P8 N( H
          F7 n" `4 Q! f, v- k1 A
        valueStr                                 = SysAllocString((WCHAR *) L"1232");  V7 m+ L6 |) g4 ~
        VariantInit(&pokeVariant[0]); 7 X9 ^$ H% |, U; [+ k+ U
        pokeVariant[0].vt                 = VT_BSTR;
0 }- j- T& C4 c# a' V0 W7 ]        pokeVariant[0].bstrVal         = valueStr;/ k% {3 }' X  r( K
/ p. X2 I; A5 ]: b; K9 D7 p
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");. s8 F' R+ J& v: F
        VariantInit(&pokeVariant[1]);
; F; i  f) s9 u" M. l% T4 m        pokeVariant[1].vt                 = VT_BSTR;
, J& y+ M8 b0 l- N# M: k        pokeVariant[1].bstrVal         = itemStr;0 M8 g( w& ?0 X, i/ ]- {' O

6 `! e0 v4 |, m5 F( X5 q          topicStr                                 = SysAllocString((WCHAR *) L"system");
1 [3 v2 ?$ S- `. v- k        VariantInit(&pokeVariant[2]); $ x+ T& w# v9 g8 V
        pokeVariant[2].vt                 = VT_BSTR;
5 c. P5 t# X8 L" T: _! \        pokeVariant[2].bstrVal         = topicStr;% E% Y! s+ Y: Z) H
" {7 K: d1 X0 C0 e  q( a
//        Set the DISPPARAMS structure that holds the variant.
7 I. h! l% H! V. ?- l) W
* N/ R! C* r6 P$ s) d; f* n        dp.rgvarg                                         = pokeVariant;/ E% P; `) j2 t+ l/ z  w
        dp.cArgs                                         = 3;
4 q' ]9 W; E% \) O* L        dp.rgdispidNamedArgs                 = NULL;
& o' D" Q0 u# O        dp.cNamedArgs                                 = 0;& [( M9 g- d9 }$ z! \
& E& A) z  l7 j. ?* D# X9 g1 g: {
//        Call IDispatch::Invoke()! @9 y3 U0 K* s1 Y- T& X0 k8 f' u7 F

! V9 {$ b) I& n2 U1 S# C4 D+ J        hr = m_pDisp->Invoke(
. @6 R1 j. Q3 Y& ^. P' l" T8 m5 M                pokeID,
0 M1 `& w' B2 z/ p: y                IID_NULL,- t) i, ^. R+ y( E
                LOCALE_SYSTEM_DEFAULT,
4 B* b+ B4 [, H0 W) Z: N4 \                DISPATCH_METHOD,
, N& f, F- t* q* A; `( L- m  M                &dp,
0 Z6 M% C9 e% |: _                NULL,
: m3 B: e4 W4 I$ A4 }/ i                &ei,
2 c# I0 r. m9 ]! j6 K# F                &uiErr);0 d5 f- h. D. V( I7 m! f7 h

1 B; V4 z% w0 h; q/ k+ P' B        SysFreeString(topicStr);
9 t/ Y. i% [0 x2 T3 N2 p        SysFreeString(itemStr);: W- K. ?) T. m' v0 W- s) ^; d
        SysFreeString(valueStr);
* z  o/ v) p+ R- \# {# b. ]2 i
. q5 @6 Z' Q4 n( F8 q8 b现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
+ |4 B, ^, k' g# L: ~此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????* d1 _$ v) _4 v4 N9 S. [
. A; Q; i5 u/ N' y. t
, d1 R' a' j8 l* s* g/ e
2.这是request的程序* b! ?9 a, K6 P' @1 }
//  Request a value from Extend  E7 ?1 q" ^3 {( O; B
//8 |) s  g, X6 j) d0 \% W9 `( X
//        Initialize the variant that will hold the BSTR.  Set the variant's1 j- p5 |8 P8 N6 M4 a* [5 R
//        type flag to indicate the fact that this variant holds a BSTR. Place the. l/ A! I6 J; a* ^- R  G% F3 P4 p- _: c
//        BSTR into the variant structure.8 z: _' B! B# p0 s5 s) F1 C- f: J$ [

  C; ]" Z& r5 m7 h4 ]        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
$ ]! [- I  d9 B0 K  n        ( ~( F- @4 P- Q8 z: @$ V
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");' b) Z3 Z8 _; A$ n7 u. T
        VariantInit(&requestVariant[0]); 2 g7 G! C. |* Y+ ~+ H
        requestVariant[0].vt                 = VT_BSTR;
3 Y2 {- v/ a) M% S        requestVariant[0].bstrVal         = itemStr;4 M8 l0 v* ^7 z

! a4 X$ _3 l/ I/ N! A2 V+ e          topicStr                                         = SysAllocString((WCHAR *) L"system");
; F+ K& V# V7 u8 y* \7 E        VariantInit(&requestVariant[1]);
  X; ]' q) c4 m- f: d/ e$ y        requestVariant[1].vt                 = VT_BSTR;
1 G' p& L# c) g! j0 c( Z        requestVariant[1].bstrVal         = topicStr;# t4 f' z- N! ?( _, f% Q

$ s1 S- y4 |' i+ j0 R8 S) I) K, v//        Set the DISPPARAMS structure that holds the variant.
, N0 u4 W1 }8 k) L/ i2 t$ P* `3 a0 p$ `9 r: w/ ]0 |
        dp2.rgvarg                                         = requestVariant;
& M- ?  p+ l/ t        dp2.cArgs                                         = 2;8 j( W% y% f# Y
        dp2.rgdispidNamedArgs                 = NULL;
! D$ J1 e- }" z# k) y! @2 I        dp2.cNamedArgs                                 = 0;
5 H  F' O4 X; A" _8 i( }8 F! X3 [4 m. o  r. s" n  M, o
        var.vt = VT_EMPTY;: M# G; z! v- k- u/ T

( b- H) @' |, I- U: M/ r) H: z//        Call IDispatch::Invoke()
* X* t% N" w( j8 [* x$ E. i# C6 S/ G2 \
        hr = m_pDisp->Invoke(
1 J# k  x4 z! r! d                requestID,) ]: P2 p; E. d$ I! N) u! B
                IID_NULL,
4 a! s, g2 ]( h' d& y) C3 J                LOCALE_SYSTEM_DEFAULT," t( c  V$ E1 P/ p
                DISPATCH_METHOD,
& f0 f* h6 l$ H5 x                &dp2,
/ W2 `& G- A& n! V8 n7 E- x/ g) n                &var,
; S" I* ^5 T1 n- S                &ei,
2 r$ @7 k+ r7 l3 ]- x                &uiErr);* [" K$ [. [6 z% O
* r* u- _  t' v! j4 S
        SysFreeString(topicStr);9 F. K4 V. H; \2 F
        SysFreeString(itemStr);
$ A7 j! U2 y, P: g0 E1 Q: `请问该程序是获得extend里面的哪个值?# O4 l* I7 U3 F5 H! O$ C
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-6 14:18 , Processed in 0.012118 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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