设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8081|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:) F* x3 r3 Q0 W+ y3 r  y
Name = (WCHAR *) L"Poke";$ _$ M- e4 a6 ^. z  _" d
                
6 d0 `0 @' e& H: d        hr = m_pDisp->GetIDsOfNames (4 j6 X5 x/ U: K, h% L
                IID_NULL,                                // reserved! @0 J' {4 F% t" J
                &Name,                                        // Array of names to get IDs for
6 b+ l5 f7 G$ X% b                1,                                        // # of names in the array
9 d! p; I4 w. H4 c5 T                LOCALE_SYSTEM_DEFAULT,        // System locale
6 @8 K5 ^$ O, [3 u0 i                &pokeID);                                // Array of IDs to fill on output
9 M5 A) w2 Y, V% X                       
; w+ Y( C. ]- J        if (hr)
, N" q$ O: Y- S5 ]' m0 H. o                {
. I! @# u1 {9 ~7 G& h                MessageBox ("Get Poke Unsuccessful");4 ^& t) A/ r/ v0 D
                return;
5 ?* I$ c# F2 k" M                }7 w) x; i8 A. \1 G5 b$ I
' B1 p4 Z/ z2 b
/**************************传递数据给extend**************************************/5 [6 W# W' X) [# X+ q8 F
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);- l# E( F8 D' D' ?. H$ z
        3 r/ J+ {& S- R4 s! b: o
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
/ k9 ?* w2 B; P1 `) s        VariantInit(&pokeVariant[0]);
$ M- d3 Q4 H  j: @" l6 V# e        pokeVariant[0].vt                 = VT_BSTR;; k( `9 s) N! y  l! K
        pokeVariant[0].bstrVal         = valueStr;
4 g6 d- u  T9 K) O) a; ], O7 n9 w7 K8 B- E9 D3 W0 W4 G; D7 d& t
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");# c% T) u3 ?. \9 C8 i7 F$ y' P$ f
        VariantInit(&pokeVariant[1]);
2 P, ?- l  U* s% X* Q6 ]        pokeVariant[1].vt                 = VT_BSTR;
) I4 g0 H7 d% F. w8 s* A        pokeVariant[1].bstrVal         = itemStr;: S8 I  F( {) w3 ^9 s
" c8 A3 `/ `2 C' G' I( l
          topicStr                                 = SysAllocString((WCHAR *) L"system");
7 q) S- A. A% m0 w" F' u( [        VariantInit(&pokeVariant[2]);
( c. G: Y. ~4 K) v4 i# U        pokeVariant[2].vt                 = VT_BSTR;
3 K( D$ W+ Y8 A4 P        pokeVariant[2].bstrVal         = topicStr;9 x7 j6 z* ?, C8 r: }9 Q6 v
- ^! F- j7 e/ a0 h9 V+ @* H& R
//        Set the DISPPARAMS structure that holds the variant.
8 @0 O% f7 c( ^8 G- s* {/ k
/ w) l5 l6 K& k        dp.rgvarg                                         = pokeVariant;
, A$ B: z7 o3 q        dp.cArgs                                         = 3;
/ R! m% A, D2 @        dp.rgdispidNamedArgs                 = NULL;0 ^5 s: l$ f" a/ |  M3 p
        dp.cNamedArgs                                 = 0;9 j) O2 K+ C. j( p% y* g

+ \0 P( P5 l5 J; _! b& F//        Call IDispatch::Invoke()
9 b4 A9 x& C1 c( V0 v2 X- R1 s) E. v2 X+ c( M5 a
        hr = m_pDisp->Invoke(( K; ~$ ^+ j% h( @% I
                pokeID,
- n7 M8 ?1 R8 {8 c  M                IID_NULL,* f: d- L. Z- g* j! B
                LOCALE_SYSTEM_DEFAULT,+ A" l: ^3 V$ d9 x6 g$ C2 s
                DISPATCH_METHOD,
1 ?; S! T+ s, U& Q                &dp,( h) G% `! f9 R+ V; u7 `! u
                NULL,
0 z& `9 S2 x. a) e* S/ v                &ei,
! l9 w, t. @; A/ h                &uiErr);5 ~) c1 r  j# @7 T5 w1 o" v, T5 V4 N
$ h0 ^. \$ c& P
        SysFreeString(topicStr);% d% ]0 s3 |" a1 K' ]: Z" _
        SysFreeString(itemStr);( a/ E* g% G9 ^5 f! |
        SysFreeString(valueStr);7 E# }) L0 h% A! [- R* w

4 b) a; G/ B: V* m; K: Z现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???; ~: y) O" e+ `/ `; |
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????1 s. H$ w0 T  Z% Z: m$ J( F! t

) \' j. M& @# f' S) c+ t: n3 \3 ~1 T0 L7 e7 E5 C4 h
2.这是request的程序
! m  b; ^: y2 q, e/ F+ s; H//  Request a value from Extend
: V6 }* A% D. h+ @//; {2 K# O0 H2 T- R; g
//        Initialize the variant that will hold the BSTR.  Set the variant's& u- O0 F1 t' }1 I: t
//        type flag to indicate the fact that this variant holds a BSTR. Place the% Z! ?" X3 y6 Z& d) K
//        BSTR into the variant structure.  O* U1 F3 K& Y7 g0 u. n

; S+ E$ c) l# L        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
& y0 g/ x1 R7 }1 W       
% P5 J6 ]8 x. \+ M1 X1 a2 G         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");  E) k! p1 q2 o# m8 ?0 |; C- O
        VariantInit(&requestVariant[0]); 3 K8 j  y: q2 Y7 o' F8 o' e5 E9 |" m
        requestVariant[0].vt                 = VT_BSTR;
2 `$ a5 S+ _$ z        requestVariant[0].bstrVal         = itemStr;
5 t8 h8 z) j) O+ J  E: s& a
( R  ?0 b6 I( V, z8 S# K          topicStr                                         = SysAllocString((WCHAR *) L"system");
9 @. T4 k0 J0 H9 j% i* a        VariantInit(&requestVariant[1]);
+ N  M- A2 C& O        requestVariant[1].vt                 = VT_BSTR;
' F8 K! k- J) k  ?! w5 r. a        requestVariant[1].bstrVal         = topicStr;1 r1 {# {7 e4 W2 i6 R9 q

6 Q0 W1 f9 P2 f3 F6 b1 @6 z' b  I7 k//        Set the DISPPARAMS structure that holds the variant.
( e3 X" |. ~# [6 |$ c: e# }4 S
- N6 g* D; g8 J0 C  C        dp2.rgvarg                                         = requestVariant;6 q+ T2 h' q+ J6 u  f
        dp2.cArgs                                         = 2;
6 f7 p& e5 w; W; L) s  ^6 V        dp2.rgdispidNamedArgs                 = NULL;
3 Y) ]( A& f4 M/ r( W        dp2.cNamedArgs                                 = 0;
& t4 D; |* _6 u2 B: X+ i3 U
# m# u: ]; U- ^" O: G7 Q  Y         var.vt = VT_EMPTY;
, k# ?& M2 ^% n0 f$ E& l
( r& ?4 k0 Z9 k' K8 k//        Call IDispatch::Invoke()
$ s9 K" F8 k! ]: f! h' H7 {% K
7 K; S2 i) b( I8 N        hr = m_pDisp->Invoke(; H1 t8 o% U' U+ D
                requestID,: _! \4 X2 _7 m; Y' @2 r( U
                IID_NULL,
, m! c$ e9 ~5 v* ^; c0 p) `" B                LOCALE_SYSTEM_DEFAULT,7 W, J( Y! R/ O% T4 H' Y# a/ V
                DISPATCH_METHOD,
) M% G) B$ }/ d, e1 M                &dp2,
8 M- g' G: ^# D: v1 D; Y                &var,5 O7 t  F& o. V1 d1 Y; u
                &ei,  ^% R9 U8 M, N" s, Q0 |, D
                &uiErr);3 J% ^6 |1 h+ j5 m

9 a$ F0 k& ^% ~& U        SysFreeString(topicStr);. d, b6 N& E! `' ]
        SysFreeString(itemStr);# J. E2 K" M+ X# h5 G
请问该程序是获得extend里面的哪个值?: \3 g5 Q6 g. Q8 ^" S
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-2-14 02:29 , Processed in 0.017528 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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