设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11144|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
0 v5 b* u" p9 S, i9 ^' o) H) pName = (WCHAR *) L"Poke";
6 H# N4 q: Z2 _                 * [& u4 M8 \8 q$ I- U
        hr = m_pDisp->GetIDsOfNames (
: N( F2 g4 ^+ q; `$ d) d* o" P                IID_NULL,                                // reserved
  s4 C2 R, a$ r- T  h* o                &Name,                                        // Array of names to get IDs for$ h$ W3 e$ |! x9 d! D: Q
                1,                                        // # of names in the array
# n1 W8 O& D7 {2 r2 J                LOCALE_SYSTEM_DEFAULT,        // System locale
! w7 d) s- w" F% a3 d                &pokeID);                                // Array of IDs to fill on output0 X" f4 a3 x' Y& J! D8 f) R
                       
9 i' T7 U' |' b        if (hr)
: ^- q8 J9 B4 _                {
6 Z* {, P- b/ k2 a2 M                MessageBox ("Get Poke Unsuccessful");
1 L- m* s5 Q$ ?- |3 k, R) y                return;- R2 u" y1 R: u; U. z, s* Z
                }
  u! I- K/ x3 E/ U& D
' x! d$ P6 @& L; Q& h' {/**************************传递数据给extend**************************************/
* g/ b$ ~9 n+ O1 `+ \+ t        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);; @+ ]5 r8 q4 @4 L& u; |7 k
        9 X! r4 }, v% Y$ w
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
% Y! }. |; m0 S  h5 T( W: u        VariantInit(&pokeVariant[0]); 7 s% Q/ p0 X" [# y$ w
        pokeVariant[0].vt                 = VT_BSTR;. |7 B) j" p4 G9 n0 Y, a( ^
        pokeVariant[0].bstrVal         = valueStr;
) {& C3 s! y3 e2 }+ _3 H. B$ E0 p9 x
# Z: ^& B2 x9 d. q         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
4 |( T7 ^' E7 }; e+ e0 l        VariantInit(&pokeVariant[1]);
  X* T% v9 M1 Q/ n4 y( s, ?3 J        pokeVariant[1].vt                 = VT_BSTR;  G3 e9 e. t8 a8 U2 M  \
        pokeVariant[1].bstrVal         = itemStr;
+ ~& d8 k% i0 J% E# O7 [! y6 X3 u* I) ]9 Z
          topicStr                                 = SysAllocString((WCHAR *) L"system");
$ K! \: N# V8 ~  ?" Y2 f- o3 O& n        VariantInit(&pokeVariant[2]); 5 }, E, e- ?  R5 }& Y  Y
        pokeVariant[2].vt                 = VT_BSTR;
" K% ~/ A4 Q: K8 A4 h        pokeVariant[2].bstrVal         = topicStr;1 }& F; C+ \$ A
; v1 A- F) n3 Q& K( f( d8 K5 w
//        Set the DISPPARAMS structure that holds the variant.3 ~1 u; z4 w& G% E

' q9 g' a/ P# D) W$ T$ m! E4 h        dp.rgvarg                                         = pokeVariant;0 M, V0 m0 I0 Z& K- W7 O* Y
        dp.cArgs                                         = 3;
- O* ?' N/ k) x( Z9 x6 [1 Q! \        dp.rgdispidNamedArgs                 = NULL;) q3 l5 `, E5 x9 v( G9 e
        dp.cNamedArgs                                 = 0;# A4 f4 v5 R% ~7 }( B# Z

& r4 K" |7 Q; l, t& X- y//        Call IDispatch::Invoke()' L; m; z- {% F3 V

  k1 V- |8 P  P* i+ U        hr = m_pDisp->Invoke($ Q1 P  n- ^0 b5 F
                pokeID,2 V* ~& b$ t1 E) N
                IID_NULL,
- \' ?: i5 `7 T) K# B                LOCALE_SYSTEM_DEFAULT,
0 }- r  N7 ~5 i                DISPATCH_METHOD,+ b2 h' f# _9 a2 y) b% E
                &dp,+ i, ?  u5 s: C* ]$ ]0 M$ i7 A2 M6 \
                NULL,4 {/ M% K4 M# I( K
                &ei,
  I1 C+ W2 P0 `6 ~, H% v, Y                &uiErr);
6 {9 `) @" ?$ R' P1 k! R+ c5 d5 ?# P$ v% f
        SysFreeString(topicStr);
; e2 j" ]' P+ J) G        SysFreeString(itemStr);
$ o0 l! v, A; ]2 ^0 w! z        SysFreeString(valueStr);
: P3 E9 U- A9 K) o, C( k: k' p/ q! P0 d. j
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???- _5 h* k+ I& p" X4 {8 C
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
" Z1 m) m3 e: _8 L( x
1 z( N, Q" h5 X8 d# {9 }8 V( _* |2 L/ u; A! l6 |, l9 U! ]$ i* b
2.这是request的程序
: T2 j/ x  H2 b* W! A//  Request a value from Extend- w; Y4 D! I. P9 O' ^; E# a
//
! S; P, g7 N( U1 w$ S2 R, H//        Initialize the variant that will hold the BSTR.  Set the variant's
* @# O0 a: ^+ U! B' Y3 I8 ^. Y//        type flag to indicate the fact that this variant holds a BSTR. Place the
3 m* l* z# g1 x  ^8 p; J( {5 d/ j//        BSTR into the variant structure.
; b9 \3 C' T& w% V3 p7 Y9 f2 X0 i% @- o# E
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
# U9 T" V. S  H6 {3 u       
+ A% \, m1 Q5 _; n7 |         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");8 F# C& v% J4 F* q  a
        VariantInit(&requestVariant[0]); 1 N# d6 O6 E& i9 s# p# J% t
        requestVariant[0].vt                 = VT_BSTR;
4 h5 @9 ^8 e: l. i) }        requestVariant[0].bstrVal         = itemStr;: f* F( f9 \7 h. g

0 K) `( Z& W3 P2 |3 K' h0 P4 e9 g0 B          topicStr                                         = SysAllocString((WCHAR *) L"system");
' {- k6 }" R4 [) R        VariantInit(&requestVariant[1]);
9 d, ^$ e# l* R% w( A/ j, \0 \+ U6 ~        requestVariant[1].vt                 = VT_BSTR;
" P1 E% d" ~; z; A        requestVariant[1].bstrVal         = topicStr;; }0 F& ?( S9 W! T! t; f  Q9 b5 k
1 j, `; ^0 ?# ~5 j9 Y( w
//        Set the DISPPARAMS structure that holds the variant.
% B% q- C' K& c) f& K8 x, J) C) `) n! ~' b/ t! w7 m( c
        dp2.rgvarg                                         = requestVariant;
3 `4 F, w  Z, }        dp2.cArgs                                         = 2;& M& S6 W3 h+ G$ b$ `, }5 ?/ j
        dp2.rgdispidNamedArgs                 = NULL;
7 d' u1 o- v5 G% v# y* `9 _        dp2.cNamedArgs                                 = 0;! a8 c6 r$ g8 X% K* n

7 P9 y3 F1 u" y2 [8 C% z. P         var.vt = VT_EMPTY;% [" c2 N. ?9 R8 m+ u

: x& e# v& `& v, N//        Call IDispatch::Invoke(). _! x- ?7 p# @) _1 p2 n
7 G0 L9 f' V8 }% r9 r
        hr = m_pDisp->Invoke(& v- P" D4 o- A" c/ S
                requestID,' b( ^9 M, @" t' b; E- L, u2 X. r
                IID_NULL,- X; T2 `7 [9 g: ^/ P
                LOCALE_SYSTEM_DEFAULT,( i! W- X" t) u! Z2 J; V; c1 p
                DISPATCH_METHOD,
$ L6 s- W9 Z- d1 Q5 F' v. m                &dp2,
: m2 J; T/ U+ j                &var,
( z4 @0 c3 f) f# P                &ei,
% C& E( z4 M+ Y- J9 Y                &uiErr);% r; r$ |8 u+ g$ y" q1 m) t

1 K  D- B  {* j4 P5 E        SysFreeString(topicStr);
" v  A& q. |9 n; X% q9 J; J        SysFreeString(itemStr);, G# @7 ^9 x$ m; f/ `/ c* g
请问该程序是获得extend里面的哪个值?
1 D7 G( o: Z( D如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-28 14:19 , Processed in 0.014341 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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