设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7580|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:/ D) H! l% e9 {) Y6 K
Name = (WCHAR *) L"Poke";- r: g% ~/ s$ q9 y6 ?3 c
                
# r' p; W2 l* a        hr = m_pDisp->GetIDsOfNames (- g+ q# j0 x4 R3 q8 a. P6 J
                IID_NULL,                                // reserved
8 P- ], R. z* N                &Name,                                        // Array of names to get IDs for) F4 [5 B$ R; Y7 V$ P/ x  `3 W- J
                1,                                        // # of names in the array/ y0 M4 U$ P6 ^0 y$ s( M% t
                LOCALE_SYSTEM_DEFAULT,        // System locale& G6 O' \! f4 q+ x0 v4 r
                &pokeID);                                // Array of IDs to fill on output! H6 k7 l" g( e" \/ J( d
                       
- C7 O2 u/ x# K9 b1 Z! {, c6 W        if (hr)
& y  R& h; a; ?5 D                {3 ~! C$ D8 K- R" w
                MessageBox ("Get Poke Unsuccessful");' C1 Q* j# P/ Y5 {5 V8 U
                return;
; F% D& P! c/ j* q" F# |8 b3 C                }- n2 t. w4 E1 g; \6 _# U

) [# I7 h* ?# ~7 h+ U/**************************传递数据给extend**************************************/; i4 g" G( g. b3 a
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);0 E! e  v) A. v
       
& e& y% Q0 r- u         valueStr                                 = SysAllocString((WCHAR *) L"1232");6 ?# u% n$ T1 p1 }
        VariantInit(&pokeVariant[0]);
# m" M' g+ w6 B2 S& J5 P1 o) o6 d& r        pokeVariant[0].vt                 = VT_BSTR;
' T! m, Q  L! N& K* n# P; T) N        pokeVariant[0].bstrVal         = valueStr;8 A1 J2 a* O* [$ ~! w

7 D: e1 Y9 K$ L, E         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
* z) y9 s$ @& f% s9 Q1 z5 @3 _        VariantInit(&pokeVariant[1]);
# j$ K! b8 @  U        pokeVariant[1].vt                 = VT_BSTR;5 m( J/ v# v% M" ?& B* o
        pokeVariant[1].bstrVal         = itemStr;0 l. @$ m$ T9 M' J! v# a
6 c7 Q- N3 m" c& Z1 b# O# i6 J. F
          topicStr                                 = SysAllocString((WCHAR *) L"system");
2 q9 W' V7 ?3 a! F& V% G        VariantInit(&pokeVariant[2]); 1 R& d' Q$ ]6 m" n2 \2 }6 C
        pokeVariant[2].vt                 = VT_BSTR;
6 H4 g  P3 d  _5 U  P        pokeVariant[2].bstrVal         = topicStr;7 u! ~6 f! R& X3 t: R7 Y: x2 p
) o6 |3 A2 h1 I, ?/ L( W
//        Set the DISPPARAMS structure that holds the variant.9 G0 ]' G  i6 N3 [/ O

) n/ Q( r& G* A6 z( {        dp.rgvarg                                         = pokeVariant;0 o4 A  i0 F$ V7 w  w5 y' q- E( W3 T
        dp.cArgs                                         = 3;
/ G9 I1 F! [2 Q& \" I) G/ a        dp.rgdispidNamedArgs                 = NULL;/ p6 @% s/ A! L- ?. o  L
        dp.cNamedArgs                                 = 0;
$ O& z6 J8 k2 ?' A
$ h" I8 H  K' w+ K8 w//        Call IDispatch::Invoke()2 E3 u& P' l$ _) T: Q
4 U2 e$ P! O$ G+ ^. b
        hr = m_pDisp->Invoke(
# H4 S% b. a1 `# S# ~                pokeID,9 r2 C6 }! J6 b9 @
                IID_NULL,& `2 ?% r0 X$ e* {* t6 {3 |
                LOCALE_SYSTEM_DEFAULT,$ O6 c1 M( w( b% j) C# _- ^8 ~
                DISPATCH_METHOD,% \' ^# v* \; S. W( U$ E
                &dp,
4 n( J, Q, T/ b! q7 X3 a$ @% h2 e                NULL,
" D# ?7 _. w" ?* n% x                &ei,
. I4 V1 N" G/ T) _4 u3 J6 [                &uiErr);
* q& T6 h& b3 ~& P8 K
! u3 n  p, s" s6 i( u, L( q6 w: i        SysFreeString(topicStr);1 o3 c/ L2 L% Y% a5 }
        SysFreeString(itemStr);. N) [! Z% G3 q; \( l: G
        SysFreeString(valueStr);
: V3 H' c$ N8 ^, y; {3 N7 o$ M! U) E. m& I5 R0 {
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
/ F( B( k7 F" I% d" o8 o" R4 r此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????  G* x; d1 |: i6 z
1 `5 R% a! _7 [9 \) O
' c2 O1 u( s4 R2 X
2.这是request的程序
# f7 m& @$ c: M# M//  Request a value from Extend
$ |' G3 h6 E* l1 n* T0 f//
0 I, s- B8 _8 C7 H) G7 d//        Initialize the variant that will hold the BSTR.  Set the variant's$ ]7 P. }6 \( g
//        type flag to indicate the fact that this variant holds a BSTR. Place the) V% r2 y# |- `) `8 e0 f$ S" L; B
//        BSTR into the variant structure.2 R' c7 k: z* c& P% p- S/ y

0 w5 X3 c9 V& J% D  e        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);% z$ ?/ p3 F+ O' a! r8 w
       
4 S) y3 w" R; x5 r& G" d         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");6 w0 b( f0 F1 P, D: r2 e
        VariantInit(&requestVariant[0]);
4 t' _: b  r" H3 u) D1 b7 s        requestVariant[0].vt                 = VT_BSTR;! M1 C, e8 v3 k. s0 A! {
        requestVariant[0].bstrVal         = itemStr;; c9 q; i& l+ ]- U
* h6 H1 Z3 J2 p2 G. J7 J
          topicStr                                         = SysAllocString((WCHAR *) L"system");7 N4 G) I) `$ R
        VariantInit(&requestVariant[1]);
3 Q5 P6 i: z6 o( R: ^        requestVariant[1].vt                 = VT_BSTR;$ e0 `( a+ e3 {% v% E
        requestVariant[1].bstrVal         = topicStr;, u* ^. J, p. l4 h. N2 O, W8 m; S; z
2 w4 t( p9 k. a$ N4 }* \
//        Set the DISPPARAMS structure that holds the variant.
: h9 A  ~9 z9 E- D( P
9 l: K& i2 H* k' p" Q9 G3 A2 {        dp2.rgvarg                                         = requestVariant;
6 ]1 s& y, G% z% c. G% H        dp2.cArgs                                         = 2;
5 v1 V) Q7 a$ y* O- y        dp2.rgdispidNamedArgs                 = NULL;
9 j4 w- f. m$ o) J' F# d        dp2.cNamedArgs                                 = 0;, f2 l1 o, J4 Y: u, O  {

8 s* O( ~5 o8 p1 Q5 d9 o) l         var.vt = VT_EMPTY;
+ H% `0 G( K% {7 _& _
! ~8 U8 V( T) ^( l9 ^//        Call IDispatch::Invoke()& b( E/ C2 W) L5 @' M* l! X+ F/ \. |% x2 A

; |; d1 d& b" _& x) a9 S        hr = m_pDisp->Invoke(' h+ I. @# V. Z5 H; d' T1 s0 l1 b
                requestID,. u9 s6 y4 b& m. N2 u
                IID_NULL,! N3 a4 G; o, J# z0 P
                LOCALE_SYSTEM_DEFAULT,- T) ^. i* d# S
                DISPATCH_METHOD,
5 a+ X  P: x+ f" j                &dp2,
% }6 `  y  Q& f: z4 S- v7 c2 S" W. M                &var,
5 [6 R8 c; c/ u- A( `- d                &ei,8 m# ]& ]( G) F; E- }
                &uiErr);( t5 P9 E$ j  @7 p8 m

( m( t' J+ G' k6 J5 s/ Y        SysFreeString(topicStr);$ F6 ~4 t- c/ V& J* B
        SysFreeString(itemStr);
9 O; k- j- X) _# n9 z: u0 X请问该程序是获得extend里面的哪个值?! t7 `/ ^( j! f8 x/ {( l; o8 H+ U
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-1-25 16:14 , Processed in 0.019102 second(s), 13 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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