设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7021|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
( @4 A* G% n- a# h  RName = (WCHAR *) L"Poke";
( p% ^1 r7 M+ z6 ?: A8 R                 " P2 ?$ h7 G  X! {- T1 g& i
        hr = m_pDisp->GetIDsOfNames (1 K$ J5 a: B9 F) j! b( p
                IID_NULL,                                // reserved
& d4 T/ R5 l& s; g, x8 ?" b% B                &Name,                                        // Array of names to get IDs for
3 c7 `/ J4 d9 Z; ^$ h4 o                1,                                        // # of names in the array+ |0 h5 S6 R, o3 X
                LOCALE_SYSTEM_DEFAULT,        // System locale
) x  q9 t/ n: Y& G                &pokeID);                                // Array of IDs to fill on output1 @1 w* k  r* f( u5 f
                        + k) ~) C4 c. d
        if (hr): z+ L1 }1 S/ `4 k2 _; E& K: d
                {1 ~  J: ^! p6 A* r- ^# e0 O
                MessageBox ("Get Poke Unsuccessful");) y) ]$ ?1 |; p' v
                return;
8 T5 M/ }  Q; k- X; ]( L                }
' c, \- L3 e3 H6 y: z* H) @7 J- L) d: O
/**************************传递数据给extend**************************************/
4 S- n! ]3 r$ j6 E        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);: q; u" m5 `- x$ J; d1 m8 q
        - ?7 j' t  c/ L. [5 h
        valueStr                                 = SysAllocString((WCHAR *) L"1232");% X, v8 I8 I% d5 `. ^
        VariantInit(&pokeVariant[0]); 5 a' o) ?, ]# r5 u0 |3 _1 B
        pokeVariant[0].vt                 = VT_BSTR;
) M4 B) Y) S2 g. w        pokeVariant[0].bstrVal         = valueStr;
/ c2 C6 J3 r/ E6 |1 }: i8 Y2 P# Z1 d+ M( D$ b% b8 N
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
" e4 w) f, ]4 k% A        VariantInit(&pokeVariant[1]); $ j7 d% i( B+ n, {, X
        pokeVariant[1].vt                 = VT_BSTR;
1 j5 a3 v" N/ f! w        pokeVariant[1].bstrVal         = itemStr;
# V8 N% L6 ^0 o4 |5 R# e; O8 X* c4 M0 w! k5 d5 }; \+ X& ^& Q% K
          topicStr                                 = SysAllocString((WCHAR *) L"system");, \0 u+ r4 X' E% |: s' X
        VariantInit(&pokeVariant[2]);
4 R2 S, [4 d" J0 G% S$ `+ ~$ c        pokeVariant[2].vt                 = VT_BSTR;- z( v9 B, T" Z% e% j
        pokeVariant[2].bstrVal         = topicStr;
, _5 I" @5 y  w" I2 a$ S
9 ~! b" [4 F: q* [//        Set the DISPPARAMS structure that holds the variant.  |) N5 I& y" g( G# @
; Y7 v. z& I5 m0 T1 B5 i! B
        dp.rgvarg                                         = pokeVariant;
  @' y5 b8 p3 M0 P/ L3 i+ M        dp.cArgs                                         = 3;
3 }2 Y" {0 \' ~7 _        dp.rgdispidNamedArgs                 = NULL;
( W. o, j% K) j  S- g$ S& X4 S  G        dp.cNamedArgs                                 = 0;
# j' B* U& W3 m0 l: k
! G2 z7 h+ d7 t; f//        Call IDispatch::Invoke()  P" |/ W+ S  x) G

, l& p# m, O3 q5 b        hr = m_pDisp->Invoke(
4 q: t$ l/ i! q! g: l4 \* X2 p; i                pokeID,
0 G( i# Q& P) }% _; H2 ~' L                IID_NULL,( n* _) j2 o$ L/ q* W6 i
                LOCALE_SYSTEM_DEFAULT,
' y; P' a5 M6 q2 J  C( y; y                DISPATCH_METHOD,
8 V& C' h  ~7 {6 Z                &dp,1 n- ]2 R, R+ {" b. @& g* D
                NULL,
/ ?  J$ l1 z4 H$ M8 x5 E! N                &ei,
( e& A' ]  R# Z& T* U                &uiErr);
8 L: Q7 W0 @5 s# z6 G2 X
! r$ \  L1 C& R% K3 \  {" F2 r        SysFreeString(topicStr);
$ ]# l4 ^0 g7 [6 F1 j# H        SysFreeString(itemStr);
. ?& S& L2 E4 t& o0 z        SysFreeString(valueStr);2 z" g8 m1 v- j4 V7 N" n3 {1 y) e

9 a: A: w4 ]. }) Q( B$ F3 I2 o现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???7 o- x3 ]2 u$ W( S8 P5 i2 J* _" Q
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????- c  W; L, t5 B- ~4 ?

( F7 e. k  k8 H( O/ b
) J& l: i& b  X8 i2 R! V+ Z5 ~# m2.这是request的程序# F! M! N: X: |
//  Request a value from Extend' L% O% S- A9 b1 g8 ]" _+ T
//
/ p8 W1 c4 a! t# h" p8 Q# [//        Initialize the variant that will hold the BSTR.  Set the variant's
  j/ [% @/ |1 t* K2 A( u//        type flag to indicate the fact that this variant holds a BSTR. Place the; F9 F0 j2 b- X! u' k- X8 B
//        BSTR into the variant structure.
( B4 K. k  L9 k+ b3 N( P; D6 M" ?/ ^* ~
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
# M3 E5 Q4 ]) Z$ A+ n* c        1 B# f8 q9 b" `" v* w$ n
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");- P. p( v' M8 T0 `' [* x
        VariantInit(&requestVariant[0]);
0 ?, J; @3 B2 a0 \" F# c        requestVariant[0].vt                 = VT_BSTR;% E7 P! t! I4 Q5 z2 Q( w
        requestVariant[0].bstrVal         = itemStr;
# D7 w7 Y, p& h% X1 H# [
4 r$ s, X1 X- H( ?          topicStr                                         = SysAllocString((WCHAR *) L"system");5 j. d% O0 o. @! B( g
        VariantInit(&requestVariant[1]); 0 N/ x4 Z* i* I" P
        requestVariant[1].vt                 = VT_BSTR;; Y) q6 O5 k6 M6 H" F# E
        requestVariant[1].bstrVal         = topicStr;
) J, I& S( q. ^; v' z& j$ k
5 m9 p" m/ [" t//        Set the DISPPARAMS structure that holds the variant.
& O: a. c/ E0 ^6 |! ^6 e
3 U" Y! {; Y' ?3 n        dp2.rgvarg                                         = requestVariant;
$ ~7 S3 c5 l8 }1 b        dp2.cArgs                                         = 2;
5 _( E$ W1 g2 `& N4 `+ v# T% o3 |        dp2.rgdispidNamedArgs                 = NULL;& E6 W+ {! P6 u' n; y+ [
        dp2.cNamedArgs                                 = 0;( N* |1 o$ V6 N( g( E

4 U! J% a- W5 r. l         var.vt = VT_EMPTY;
. r/ u4 ?+ R! n' |5 ~7 d0 Q, d/ h4 R1 ]* N, g
//        Call IDispatch::Invoke()
! u8 _) \% s# g0 h8 P2 G. A5 Y
3 I/ n% p4 g5 e/ m, D        hr = m_pDisp->Invoke(
* D; ~1 ?7 q1 D  p( u" H6 w                requestID,
, i! B0 C# q$ `# G& A/ j/ _6 v/ M                IID_NULL,5 q( k' k; i* w: s& {2 F
                LOCALE_SYSTEM_DEFAULT,( }7 t/ Q/ ~6 h+ Y( `
                DISPATCH_METHOD,
: w/ M( a  N: [; ~" h                &dp2,
/ N: ?+ j1 i7 f                &var,* r3 V* @) c7 B- f
                &ei,
5 G! u; H  S' G* a/ C                &uiErr);  ~; e- S! w& H  @1 s+ h

- R# M0 g- ~1 `- @5 \        SysFreeString(topicStr);
+ L( b2 ]4 n3 T        SysFreeString(itemStr);" \, D" W0 B" L6 [9 A, t
请问该程序是获得extend里面的哪个值?7 }# U; r8 |9 o* H  R/ b6 k
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2025-12-17 17:09 , Processed in 0.014148 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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