设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9453|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
4 h1 v" S4 v- A3 K4 W7 n0 HName = (WCHAR *) L"Poke";
+ Z& J( E, q) K0 b- r+ R                
" l$ V8 @. z+ c. @( W% ?- l        hr = m_pDisp->GetIDsOfNames (
" q+ P6 d' |# w1 X  ~6 W9 k                IID_NULL,                                // reserved
' j9 L4 b. G* R; X& j                &Name,                                        // Array of names to get IDs for
1 V" `6 U3 F" h8 C( L; X                1,                                        // # of names in the array! R% R% n! S+ v/ o/ Z6 c$ a
                LOCALE_SYSTEM_DEFAULT,        // System locale
+ Y1 z% d' \- @4 ~! s: m                &pokeID);                                // Array of IDs to fill on output
. X0 g4 Y: Z4 h2 X; Q' a9 s                       
; E1 g- k( m. Q2 Q        if (hr)6 ^+ j$ b, i, s' g4 F% n
                {. X, T/ y8 O% U4 N% u
                MessageBox ("Get Poke Unsuccessful");
; a! r, x  y7 p9 z% q                return;  z& E) c+ o2 R! J, n
                }
! ]: l  r( O% e+ o! B
! A3 r$ d1 }1 l" W2 Y/**************************传递数据给extend**************************************/
6 x4 X. L9 S3 d, _        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);+ B  }+ d* ?  S, b7 F7 R" U
       
# v! ]6 ]2 z# e         valueStr                                 = SysAllocString((WCHAR *) L"1232");' C+ _- {( v8 C- N; f% X" V
        VariantInit(&pokeVariant[0]);   Y: a' A5 l+ i. T" o( o& q. \% q) p
        pokeVariant[0].vt                 = VT_BSTR;
, E- m  m6 e4 ^7 _        pokeVariant[0].bstrVal         = valueStr;
3 N2 b& Y! K! m5 U9 T" [4 A9 c) [+ J: }6 y, c4 a" a, A
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
. J  m* C$ T: d" u0 V5 G& R! ^# `        VariantInit(&pokeVariant[1]); ; F6 Q; w  Q0 n2 \# l
        pokeVariant[1].vt                 = VT_BSTR;
( @7 \- W# H" @6 h        pokeVariant[1].bstrVal         = itemStr;
: L) l& y3 x; a8 B6 r" x
# r: |) B7 D: L4 B6 m          topicStr                                 = SysAllocString((WCHAR *) L"system");
+ J, _3 N( V% U/ V3 x; y2 I, H, S2 _        VariantInit(&pokeVariant[2]);
7 r3 w8 w$ u0 V& V6 _        pokeVariant[2].vt                 = VT_BSTR;
7 R! q# S8 N% m  q/ J! e        pokeVariant[2].bstrVal         = topicStr;! P) j3 |  E' D" O
5 M2 K" d% o, C8 l5 ^4 [  D; @! W6 u) X
//        Set the DISPPARAMS structure that holds the variant.
" v/ ^3 N7 H. q$ p1 Q+ z( i/ f# ]: F1 |$ K* v2 W7 F( {- n
        dp.rgvarg                                         = pokeVariant;
+ t( B8 b2 A1 a8 X2 l: N/ n7 W        dp.cArgs                                         = 3;
3 u) ~- i: Y- b( E5 U        dp.rgdispidNamedArgs                 = NULL;
* Q0 Z. }* O$ ]/ q        dp.cNamedArgs                                 = 0;
& I# l0 V: O+ j9 G3 m7 I3 Q! w. g3 k1 |0 {- A8 N
//        Call IDispatch::Invoke()3 ^- \1 m! z" {4 D2 E

" G/ U. n1 W( N7 d5 B! q$ k        hr = m_pDisp->Invoke(% f0 B3 b8 w, D" J: ^
                pokeID,3 Q, W) ^/ i% L. v( n
                IID_NULL,
8 b% h  S! i0 M# Q8 s( A                LOCALE_SYSTEM_DEFAULT,0 _$ g* h0 p  A# N
                DISPATCH_METHOD,+ V" G' `4 \: V  g! P7 ?1 T
                &dp,: l, t7 a* O4 f/ S. c8 [
                NULL,
. f$ s1 q' _4 T" t, r                &ei,! L4 `; V7 P% Y
                &uiErr);3 O1 F5 k6 ~! O6 }

$ U, G9 ~/ `5 k( U; j7 F        SysFreeString(topicStr);' ^+ Y5 ^! \9 T8 {- O
        SysFreeString(itemStr);; |2 x% d0 f' o3 M
        SysFreeString(valueStr);8 y# ^1 e! O7 ?7 C2 f! E/ k

7 c4 ?: b( {7 |$ _/ E/ V现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???4 E8 Q% X* P2 ?- M( r/ g4 Z1 x
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????* c1 K6 |; e3 D5 L
4 s  u; w% ^5 R# O' c% \8 ^

- o' N; c- Y3 [( p5 O( C4 ]# j2.这是request的程序
4 b7 K- o5 P# H& V) `. Z9 Y9 X, L, U, K//  Request a value from Extend7 W4 x2 I! `" w! S' [4 s9 F
//
' j2 L5 r2 o. a: D8 n0 t; _0 l' ~//        Initialize the variant that will hold the BSTR.  Set the variant's. U* f9 |$ k& i( `6 v1 n: _
//        type flag to indicate the fact that this variant holds a BSTR. Place the9 a5 e' ~5 t. s
//        BSTR into the variant structure.
5 Y" M* @" c/ V0 ^0 @* {
& s& O* J. k# m        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);  p# C1 C& {$ v" ^. i/ }9 o. Z4 d
       
. t6 ~# v. o- x; N         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");! l' V3 d/ V  \5 f
        VariantInit(&requestVariant[0]);
9 b& A2 W3 A) t9 V9 ^/ w        requestVariant[0].vt                 = VT_BSTR;
- t9 D2 w  v3 X' p& n$ R3 k( Y  Z9 F        requestVariant[0].bstrVal         = itemStr;
$ {& j8 O; y' Z
8 A' y- }4 B/ ?! x. K6 o          topicStr                                         = SysAllocString((WCHAR *) L"system");& L$ t, x0 O2 u1 F
        VariantInit(&requestVariant[1]); 0 x+ U+ X) k) d, B
        requestVariant[1].vt                 = VT_BSTR;
1 q5 W9 |# B' K3 @0 N) n! v9 m, b        requestVariant[1].bstrVal         = topicStr;- ]) J1 A8 N4 l/ Z# p" e1 Q

* o) Z6 q' W+ R" l  D4 T/ A5 `//        Set the DISPPARAMS structure that holds the variant.
4 _/ m- X+ g' P6 Q
% N6 _3 O; p) m, f' |- ^9 J2 {        dp2.rgvarg                                         = requestVariant;
: F8 T" ]. f, V, [        dp2.cArgs                                         = 2;6 S- L+ P9 t$ p3 e! c" k1 i
        dp2.rgdispidNamedArgs                 = NULL;
) i: A! ?2 l3 Y+ }) g' j" `1 T        dp2.cNamedArgs                                 = 0;
) b2 \/ x% O+ _: R2 s; C2 x# x# @  J# G
        var.vt = VT_EMPTY;: c+ v2 m* K2 Z: N
3 `& k- n  R) B3 v2 C
//        Call IDispatch::Invoke()
7 F( h* X1 i, R( ?2 s! V5 ?: ^# S9 M- n6 h, `7 I2 y' C+ v
        hr = m_pDisp->Invoke(% S! E: V, f) s( Y
                requestID,
* G- t# X+ u4 [9 [5 p! I- G  p                IID_NULL,, z8 U+ N( b2 J
                LOCALE_SYSTEM_DEFAULT,5 k) ?+ R; e* V+ n! L- x/ p3 M
                DISPATCH_METHOD,
- G& M( M  V3 t7 E, j1 }* Y                &dp2,: C! f) Z6 n4 ~+ O
                &var,
) t& C# w! b5 e. p5 ]  x+ A8 O                &ei,+ b' i; m. I- P- s0 l* j+ Y7 s
                &uiErr);* [3 M% \# e* _' Y: L* |

/ H2 E* n! L! a3 ^! L        SysFreeString(topicStr);
3 T/ d' F2 W0 f' p1 a        SysFreeString(itemStr);3 |8 w" g/ V  ~; w2 G6 X
请问该程序是获得extend里面的哪个值?, D# m. [) Y0 X# y+ a2 ?- }0 t; x4 Q
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-4-18 08:57 , Processed in 0.016725 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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