设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13253|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
/ E8 b9 S9 W! w& E" m2 e# ]" nName = (WCHAR *) L"Poke";( Y3 `; h( w6 _' t$ \
                
5 M2 W8 ]9 ^; s8 |* Y4 u        hr = m_pDisp->GetIDsOfNames (
) K3 Y5 d9 s5 M3 x                IID_NULL,                                // reserved2 X) t. S1 q& s  W. v% e
                &Name,                                        // Array of names to get IDs for& ~7 n9 J: Z% c3 @8 V
                1,                                        // # of names in the array) e! I0 [* L- s" A# p
                LOCALE_SYSTEM_DEFAULT,        // System locale
# N& ?1 ^" g, R! H                &pokeID);                                // Array of IDs to fill on output
  i5 w3 K2 v8 C; c; y5 t" d! D                       
, T( l+ y1 O, H- ]4 ~        if (hr)1 f1 ]  j8 n$ W
                {
; p5 s$ h' B' `0 C; [$ w                MessageBox ("Get Poke Unsuccessful");
9 `  ?' Q3 L! W+ \6 {' c                return;% U% Q; j* X- l: C, B, D- Q6 H
                }0 j. e& m' o# J2 c# f5 M+ [
, v: B$ ^' {& n# Q  O
/**************************传递数据给extend**************************************/
7 b$ C. s: R) I8 e+ F! g; d4 ^+ U* X        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
! c, v2 e9 U8 e0 k( j       
* O6 U; G' @2 `         valueStr                                 = SysAllocString((WCHAR *) L"1232");
6 M( J- O3 y! s  ~# r, K        VariantInit(&pokeVariant[0]); 6 C) k- J/ P6 f: U8 s# Q8 A
        pokeVariant[0].vt                 = VT_BSTR;- u) v1 C. n' [5 T
        pokeVariant[0].bstrVal         = valueStr;. P/ ~$ \6 y5 U0 m

; Q% I' c- ]) R3 i' g         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");( K- ^- d- f& c  x- m& _
        VariantInit(&pokeVariant[1]); 9 A9 x  A' C& u. g" X& f
        pokeVariant[1].vt                 = VT_BSTR;
% y0 i  |; o7 n9 D        pokeVariant[1].bstrVal         = itemStr;
: s$ q+ ~0 J* c0 k$ [$ r4 q
, f0 A: W, a  H& N7 g5 I( G          topicStr                                 = SysAllocString((WCHAR *) L"system");) z6 F% l) s# n7 I& O
        VariantInit(&pokeVariant[2]);
* W* J6 G+ @1 w8 T' M        pokeVariant[2].vt                 = VT_BSTR;
0 ~( Q3 f3 U4 w7 D+ j+ J        pokeVariant[2].bstrVal         = topicStr;
8 @1 N' i: R) M1 y
: h+ _* ?' Z3 z( R  a# d//        Set the DISPPARAMS structure that holds the variant.
, s- O0 [  b8 y% N7 `7 k6 n- U
' [! |# C3 p2 k: p. J& n9 d        dp.rgvarg                                         = pokeVariant;
8 I( V! h* P, f7 Z: S9 ?0 m        dp.cArgs                                         = 3;
8 \, ]2 P" b& n4 U& b        dp.rgdispidNamedArgs                 = NULL;$ @8 T/ p- I- N: u. q- v/ s
        dp.cNamedArgs                                 = 0;
, m( O% c4 r/ A
5 R* g4 @  r4 U% k//        Call IDispatch::Invoke()4 p' ~4 ^, O" W& Z" Q1 d2 l1 B

6 j# H# z+ F7 k) F+ t: {1 I( ^* J* P        hr = m_pDisp->Invoke(2 _6 v- J+ Q! O. r% K+ U6 k. u
                pokeID,) M# x) g- Q+ k9 Z6 ?+ J& o
                IID_NULL,
% P& I6 i/ t1 U; H4 B                LOCALE_SYSTEM_DEFAULT,
6 S9 l5 e/ j0 ]! j                DISPATCH_METHOD,
4 q  a4 Z: U. H2 K, |                &dp,4 T4 u2 ^. I! U: n
                NULL,
& K- _/ j$ V$ O# o, p                &ei,
% j+ u& p  h. L* \" v2 ]                &uiErr);
) Y" V" d% h6 E- f  o. x8 r% q. D8 k8 v# U( c8 U6 S
        SysFreeString(topicStr);. G- t4 i- l: v0 l
        SysFreeString(itemStr);2 Q2 d( i/ U% }
        SysFreeString(valueStr);- p- R$ {& ^) [
$ A; t  d( e# j( Q) l: d
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
, u# Q1 D3 d: v- w, \2 Q此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
, c9 f7 g7 }( c7 n0 U: Z$ H* I( l" A0 M; G
$ H0 V% r# u; T" n9 i
+ N! M/ b; N$ b4 I' f4 ~2.这是request的程序4 c, i5 \$ K) U
//  Request a value from Extend
1 |8 ^3 g: k; \: N/// }/ X" k- ?6 _' x+ s
//        Initialize the variant that will hold the BSTR.  Set the variant's, A1 ?# v( O) d5 U2 `( L9 j  e
//        type flag to indicate the fact that this variant holds a BSTR. Place the5 r- \8 \' E% K, F9 I
//        BSTR into the variant structure.
+ n& N4 _+ q- z# H$ n: Q4 K' H9 q  x- E- l6 g% V, T; k% I! k
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
  Y- [: N, q. b7 F* O       
- w/ B$ j3 P6 d+ I- h( E         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
5 S  N7 f3 j7 V& n' W        VariantInit(&requestVariant[0]); # k! F* w0 Z* s% o" n6 f( w* T
        requestVariant[0].vt                 = VT_BSTR;: Y9 l. u* d2 ]: J" a  ?. n/ X! T
        requestVariant[0].bstrVal         = itemStr;
% R$ P/ w& x$ ~9 G1 O1 o: ~
7 W3 q1 n9 Q+ A, b( I. o4 g          topicStr                                         = SysAllocString((WCHAR *) L"system");& U6 G( Z, u0 _, ]
        VariantInit(&requestVariant[1]);
3 i4 a) A* p+ ?        requestVariant[1].vt                 = VT_BSTR;
& w5 ^4 P. j2 f2 ]3 _        requestVariant[1].bstrVal         = topicStr;. L. ?9 l1 J4 X4 m
* ~' T1 G" Y: m4 G4 U% |# a
//        Set the DISPPARAMS structure that holds the variant.- D! S# r- W- s" T( y9 J
; `% a( P; s% m" l9 L( w
        dp2.rgvarg                                         = requestVariant;
) d$ w5 S  A; f% _5 F7 \6 ^" s2 P0 w2 h        dp2.cArgs                                         = 2;
; Y5 \* X- y% {, V' W; t7 f. A        dp2.rgdispidNamedArgs                 = NULL;
& _0 U4 L1 `- w& R/ ~  e        dp2.cNamedArgs                                 = 0;# U7 c2 j- [1 o1 q
* L: Y5 ]$ a: k) S% f+ [) i& F  w
        var.vt = VT_EMPTY;% W: E  G3 P. C+ |

. S6 A4 u1 z1 V( e//        Call IDispatch::Invoke()# O6 p  R- N/ x5 I) l

. P' f" j, V% l0 G% Q        hr = m_pDisp->Invoke(2 U4 [. X% k) s' F
                requestID,: Z' g; |  ^/ H
                IID_NULL,, j! o/ ^- v( r
                LOCALE_SYSTEM_DEFAULT,
" U8 ^4 b( |+ [9 Z                DISPATCH_METHOD,
5 s% ]" _* o) u5 y, _                &dp2,0 r# t: E/ J9 S) o9 v
                &var,* o2 r) O( S! g
                &ei,
* [: C! J7 ~. v                &uiErr);
: N5 c' l, c/ z+ o5 B) t8 D) }3 O$ @4 R
        SysFreeString(topicStr);
. R! i" j% J( @. i  ]. h) n6 L        SysFreeString(itemStr);9 B9 Y) n- ?" {
请问该程序是获得extend里面的哪个值?3 N5 _) W# T: o% i- }
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-9-19 09:58 , Processed in 0.016547 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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