设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12819|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:/ |: D  T; z9 }/ a
Name = (WCHAR *) L"Poke";
* Y. m, s9 T/ Z/ v1 C2 ]) W                
: U5 X7 W/ r/ ~- V        hr = m_pDisp->GetIDsOfNames (0 F, N6 _2 k# g/ ]* v' O
                IID_NULL,                                // reserved
- t% h9 |6 Y7 s: t1 J+ x                &Name,                                        // Array of names to get IDs for
  Y" P4 {) a! z8 E" h; J                1,                                        // # of names in the array
( ]' E0 \* A0 Z+ a                LOCALE_SYSTEM_DEFAULT,        // System locale
/ w& E; G" p- _. P7 m; b6 C! k5 p3 t                &pokeID);                                // Array of IDs to fill on output
; K: c. E0 u2 L) Z6 E  B, T( O; w                        - t. V$ t; q) a0 ?
        if (hr)
* |+ ^# h9 M: R6 ~( l4 A8 c% S: y                {% |% z- g0 e/ M- V. D
                MessageBox ("Get Poke Unsuccessful");) X4 S9 y, r% m! |( k- M
                return;  z0 u8 L& S: v/ ]  Y; F
                }
* M2 {, r* d! ?# W3 Y
/ ~8 P0 a* O8 h5 M/ a+ g/**************************传递数据给extend**************************************/
/ t1 j' M; ]/ O5 N" P( g        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);" e" Z' l4 d5 A3 |" d8 m) j
       
7 p- ^8 h% T2 i" j- _         valueStr                                 = SysAllocString((WCHAR *) L"1232");
, M, d3 _+ ~  G$ {        VariantInit(&pokeVariant[0]); ) X1 i: o3 h/ L) f$ F4 J% g
        pokeVariant[0].vt                 = VT_BSTR;: a9 }# I& S/ m  i
        pokeVariant[0].bstrVal         = valueStr;; e6 _4 i" }. j8 M* ]

5 t6 ^& y4 M0 c/ ]# r4 P9 F         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
; |! K- ]. E" @* F        VariantInit(&pokeVariant[1]);
5 {$ i$ C+ m* X/ l3 I        pokeVariant[1].vt                 = VT_BSTR;
% h$ H5 m& d3 H- h* `8 d0 r        pokeVariant[1].bstrVal         = itemStr;& a$ p2 \) ?0 z; b: }
; o1 u* E; E( w7 F& R, `" i
          topicStr                                 = SysAllocString((WCHAR *) L"system");
& n% y, \, E# J0 _        VariantInit(&pokeVariant[2]);
$ R7 |! B% u3 ]5 Y# [        pokeVariant[2].vt                 = VT_BSTR;
) t: H; ]! b( U0 N, _0 K        pokeVariant[2].bstrVal         = topicStr;- t$ C2 M/ ]9 V( H
( a# w! s& v) ?( }
//        Set the DISPPARAMS structure that holds the variant.
" ]7 s* X* |4 g) m+ X2 R( M2 W$ K: r0 h' q
        dp.rgvarg                                         = pokeVariant;  x5 f( B" Q  F- o/ R
        dp.cArgs                                         = 3;
8 z, z3 F6 f( P2 y7 u, J: h" M9 _- H        dp.rgdispidNamedArgs                 = NULL;9 Z% B0 a; Z! G- `8 u: Q& s
        dp.cNamedArgs                                 = 0;
8 f7 m; U4 C4 P& Y- L) B4 _
0 b4 F7 k, a; N9 P; R& _' u//        Call IDispatch::Invoke()
+ e5 I. t2 c. C! ^" Y( g
- ^! D+ o9 i+ \9 H& S* P! l+ g, Q        hr = m_pDisp->Invoke(
! c0 w, N! m4 p5 m& y& _, c1 T# ?                pokeID,
4 r& C: p; T$ l2 U                IID_NULL,
2 m* i) m) R5 D6 P9 A                LOCALE_SYSTEM_DEFAULT,
" d' |  x7 }6 z- U& Y                DISPATCH_METHOD,
. D) J( Z& L+ N, k- p* S                &dp,
+ c) ^7 O9 F% l8 H0 V                NULL,9 }; G3 ]; [# B- P# P
                &ei,
$ O; ^) }; |, H( {                &uiErr);, ^% A* x. \5 L0 I

6 k1 o8 a( P7 \1 q6 i        SysFreeString(topicStr);
% B/ f/ i& e# D" b        SysFreeString(itemStr);
$ ~6 N5 M- Y$ u        SysFreeString(valueStr);
2 M% R, O# Y) v( a/ A2 B
3 x4 F& R" z0 J现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???" a. w' _) j3 [/ E# U
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????) n2 a; o0 G/ e( X, P2 h
: o, A8 \6 {, C# N9 l. k
1 Y3 _+ o  v. N) }( U+ p
2.这是request的程序2 u1 a- Q* \3 m/ C
//  Request a value from Extend1 B0 _! Y9 P$ B+ K
//
4 c" \2 }6 p! L. Y1 ?" ]//        Initialize the variant that will hold the BSTR.  Set the variant's* l8 r  j. g6 u0 q6 m6 ?
//        type flag to indicate the fact that this variant holds a BSTR. Place the
# N" j& N  @; f0 T//        BSTR into the variant structure.1 ]! R8 m  U1 m4 s9 s$ ~# X, c

# Z% L8 n! M; x        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
8 h2 V# U! t. O1 t: l! ^       
5 q' L2 {3 n. I. E" Y4 c         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
( R+ P6 Z, q, n( k, _4 \6 m9 V6 w        VariantInit(&requestVariant[0]);
8 l+ `! e1 C2 A        requestVariant[0].vt                 = VT_BSTR;' M6 g; l6 Y& F  q: e
        requestVariant[0].bstrVal         = itemStr;# W& x  @5 [- g1 y
2 ^$ I) E! r* g- b7 j* z
          topicStr                                         = SysAllocString((WCHAR *) L"system");
8 Q2 h" a; S9 T6 _. h. c7 t  L        VariantInit(&requestVariant[1]); 4 I: f# `, G/ I# M# L# J- m
        requestVariant[1].vt                 = VT_BSTR;$ Z$ r: Z8 q& x  o4 G
        requestVariant[1].bstrVal         = topicStr;
* w6 T7 u: O" o* R
* I# z( k7 {$ T  W/ A! X//        Set the DISPPARAMS structure that holds the variant.
! c& C1 i  w, T, Q. f: Y4 W: k0 a. a5 R7 W2 z2 W3 Y
        dp2.rgvarg                                         = requestVariant;
; N* C) Z7 L! w1 H& K        dp2.cArgs                                         = 2;4 h- Q! S2 Z" W( Z
        dp2.rgdispidNamedArgs                 = NULL;6 \& @9 l% m8 K1 W3 C- Z* A$ N
        dp2.cNamedArgs                                 = 0;7 }3 X& D# i6 a& [

  `" K7 S% Y% a8 y3 [  @, ~         var.vt = VT_EMPTY;% W; \) z: [) }$ v! ]

( N* M/ s) t6 G9 o//        Call IDispatch::Invoke()2 {5 _8 n$ s8 x1 o- [$ B

+ H% ~5 \6 e. w/ `+ W. j        hr = m_pDisp->Invoke(
/ I/ u( K, u$ V2 U                requestID,% M6 m9 K" |; t* _9 @
                IID_NULL,  [! H* S' U' u# ~) U( l
                LOCALE_SYSTEM_DEFAULT,
7 b& }5 }! |0 D# ?9 ~' ~                DISPATCH_METHOD,' r0 P' w/ s/ @3 O2 e) F4 V' C
                &dp2,: ?+ a6 ~# |1 e2 j
                &var,
3 g5 x$ ]* F9 G1 j0 w                &ei,7 S( U/ G% {- t$ N9 h* {( H  d
                &uiErr);7 b. k2 D0 n# I8 W* Y% J1 I! v
* u. A' j+ W. z1 e" u
        SysFreeString(topicStr);3 j$ D" \: D& x$ E
        SysFreeString(itemStr);: e  r8 }, W6 Y, r
请问该程序是获得extend里面的哪个值?
0 G! o' q1 N: D: \9 e- F& e如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-8-30 23:32 , Processed in 0.017393 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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