设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9434|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:( G0 O. Z# }: L0 O8 o2 a, D
Name = (WCHAR *) L"Poke";
: L) }2 j$ R& N$ D! g3 \                
/ r) e* ~) Q; q. U        hr = m_pDisp->GetIDsOfNames (0 @, [6 U* A" ?2 D9 k- a
                IID_NULL,                                // reserved# O% J; C* `8 ]8 @
                &Name,                                        // Array of names to get IDs for, ?7 u4 ^) w! {! X
                1,                                        // # of names in the array
1 j) Q9 @! ?/ a* h7 q: l. m" H                LOCALE_SYSTEM_DEFAULT,        // System locale
  ~* i1 ^$ z/ k2 d7 K                &pokeID);                                // Array of IDs to fill on output* x& M  Z% |# \3 b$ J9 Y4 k$ K) E6 M
                        / s1 d+ H" r) Q6 R' H( r. p4 A
        if (hr)
% s1 i% _7 O4 s& n0 F                {8 K. J9 e- p! ]! K" a* R$ a+ ~
                MessageBox ("Get Poke Unsuccessful");; i' f* r6 {- J) l7 T# x
                return;* ]9 o' }& p  O6 ]1 U
                }
6 G, y1 \, {, e! D; \
, \0 g' I/ y/ ^. S/**************************传递数据给extend**************************************/7 o& i. H; h, w: b8 K, ~
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);7 A8 J* ]! T# `* T+ d- j
       
; u5 x  P- {! E9 k  E% R. D         valueStr                                 = SysAllocString((WCHAR *) L"1232");: }7 V! p  w6 m: w
        VariantInit(&pokeVariant[0]);
% \/ x2 B6 i. t% Q5 ]        pokeVariant[0].vt                 = VT_BSTR;$ L8 q5 y2 R  i% |- s) F$ Y1 ^- ~
        pokeVariant[0].bstrVal         = valueStr;9 N3 C. V% v( ~2 I2 H' a+ @5 `- y

6 E2 }4 v  ~) H         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");5 j; m* G$ F1 n2 c; }# m
        VariantInit(&pokeVariant[1]);
2 Q% O, H$ E# s- G        pokeVariant[1].vt                 = VT_BSTR;( }0 f; i3 y- x/ c/ l# h
        pokeVariant[1].bstrVal         = itemStr;: k# k3 u+ K8 c1 M7 X
0 E, s* j& y' \6 u* H4 d) Q
          topicStr                                 = SysAllocString((WCHAR *) L"system");
% Y3 K( y) N! [$ t        VariantInit(&pokeVariant[2]);
$ Q4 Y! w8 N4 ?# I) x        pokeVariant[2].vt                 = VT_BSTR;
; I  I+ u8 B/ n. z: S2 A        pokeVariant[2].bstrVal         = topicStr;
! Z* ~4 I1 W, [6 x, D8 d" O2 x  X5 T3 q/ {7 f6 `
//        Set the DISPPARAMS structure that holds the variant./ O, S5 n/ a- J" o/ G' @

3 g4 y% |/ G" q7 s7 k% N        dp.rgvarg                                         = pokeVariant;
) n' j  x* {0 W6 c        dp.cArgs                                         = 3;5 d0 P! N6 ~3 \2 g
        dp.rgdispidNamedArgs                 = NULL;
* S+ T& ?4 y# r# W8 I        dp.cNamedArgs                                 = 0;
6 P: X$ d! x* d! y$ |; |- h. c# |1 g5 t( @0 Y9 Q6 H
//        Call IDispatch::Invoke()
% [( J. R3 m* V/ n$ B0 m4 j
1 D$ ]1 V# D, r: V        hr = m_pDisp->Invoke(* d0 q4 M# c7 p8 D, }
                pokeID," W+ M' e) E4 a
                IID_NULL,
) E2 v$ b7 `6 G" |                LOCALE_SYSTEM_DEFAULT,5 u7 Z# T/ \/ @% v0 m: u  h: x+ m8 Z
                DISPATCH_METHOD,& G# L# l4 R1 C+ x$ C9 p
                &dp,1 {4 R( v$ S7 \4 J$ T
                NULL,0 P5 U) O/ b! W8 T! L$ q$ J0 M; A) h
                &ei,% k) l2 G. P' V6 i& G; G0 V3 o/ E
                &uiErr);% c& d( ]: a# B1 T. f
' Q: j4 o0 p8 _, o& A8 ]9 A
        SysFreeString(topicStr);$ e6 C# H: R8 V  x$ H6 v
        SysFreeString(itemStr);/ M- o( u9 R% F+ T& ^
        SysFreeString(valueStr);2 F2 Z/ E: o( d1 J: F
. `0 I0 ]$ q9 H, \. X$ {
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???% U$ F7 ]6 b% x0 S
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
+ ^. e, {6 u8 A' i7 \1 ~( j- h) i3 D8 e7 Q% ?2 C) M

/ H! }% D( O7 u" O8 A  m' D/ m2.这是request的程序& K7 l0 @% J5 }' m0 K/ S" s5 ~7 V
//  Request a value from Extend! G3 N" R9 Q3 t8 b
//
  G) c0 D. S% W. y, a//        Initialize the variant that will hold the BSTR.  Set the variant's4 y5 \' }6 l( J% W
//        type flag to indicate the fact that this variant holds a BSTR. Place the+ |' N: t. i2 u9 ]9 M9 J! ?
//        BSTR into the variant structure.
+ Z! F" z& F6 d/ ~5 ?  {0 Z4 V8 E* {9 d4 o! w9 k6 `% _
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
* d, _9 |# E' x6 J       
7 U( M0 [, s% V- ^% K         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
) F; o+ x- i  O, e$ w" M        VariantInit(&requestVariant[0]);
- s9 R, k5 \. E' z5 N8 O7 w        requestVariant[0].vt                 = VT_BSTR;1 s' h" a4 r+ ?7 W, P# v! ^
        requestVariant[0].bstrVal         = itemStr;
: B7 ?8 ^& T8 E" y
  \9 s$ N, n9 a7 b7 A" P. f5 |; c          topicStr                                         = SysAllocString((WCHAR *) L"system");$ t5 ]0 O0 r* b) r; D
        VariantInit(&requestVariant[1]); . x8 u7 E, L0 ?! P' V) s
        requestVariant[1].vt                 = VT_BSTR;
/ P6 z% U/ r( i        requestVariant[1].bstrVal         = topicStr;* C7 Z( O! s  ]6 R
4 H7 ^8 n$ [# M
//        Set the DISPPARAMS structure that holds the variant.7 S0 ]* D( |! C
( A4 @$ p1 n7 k: D; V( J3 _
        dp2.rgvarg                                         = requestVariant;
% ?9 A' V8 I3 [! }8 T- Q        dp2.cArgs                                         = 2;' v/ `+ c( L5 x! Y
        dp2.rgdispidNamedArgs                 = NULL;: G' ^* q4 r6 O8 E( i
        dp2.cNamedArgs                                 = 0;: H: W* h4 u1 z( M$ ~/ r7 {2 z
7 Y5 D# q+ D* j2 Y
        var.vt = VT_EMPTY;
- t) h3 ^' p  U' b# E
# Q9 P- @& A7 t& B, N2 F4 z//        Call IDispatch::Invoke()
' y( y! m8 c2 g% ?3 q/ g3 d7 M6 e" u" ^
        hr = m_pDisp->Invoke(: J- H3 t1 H* p/ n2 ^
                requestID,9 O: _+ F" O9 z9 I5 e
                IID_NULL,- R6 P' J; G5 I
                LOCALE_SYSTEM_DEFAULT,5 E; d# ~9 {& i7 g
                DISPATCH_METHOD,
- ?5 A: R8 w5 {4 m6 u# N                &dp2,' }& p: {2 g0 J  O$ c5 k8 E+ b
                &var,2 t5 B# V, P  ]) l" s
                &ei,8 x: _" X% z) i' H9 X
                &uiErr);
* }$ ]! n: ^# ^6 x4 W* \& x& f8 F. h( G' B$ z/ ?- o8 b5 t0 z- L3 N
        SysFreeString(topicStr);& V! N4 m" @9 V: R& j
        SysFreeString(itemStr);
1 ^  i: g! p6 H& h; S! R请问该程序是获得extend里面的哪个值?* h$ q1 c  y% ~" W3 n( q
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-4-17 18:19 , Processed in 0.015757 second(s), 13 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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