设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13223|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
; Z* u% q9 `7 d4 m; P" e; N) ZName = (WCHAR *) L"Poke";$ P; B5 ?0 f: C  G: `7 x
                 * ^4 S8 t' i8 |! u! X0 S
        hr = m_pDisp->GetIDsOfNames (# W  `* a8 {3 x) r7 t
                IID_NULL,                                // reserved# Y2 O+ B! n8 F2 _8 j, C7 t
                &Name,                                        // Array of names to get IDs for
, I; V# q' w  _                1,                                        // # of names in the array
; _' E. C: N5 c# b! H( r                LOCALE_SYSTEM_DEFAULT,        // System locale8 P9 T2 u( m* ]# h
                &pokeID);                                // Array of IDs to fill on output' @% v( M! r& r/ @3 U3 U0 R, v
                       
, o5 O; p, m* K4 x0 j* S        if (hr)
; w* O1 L6 }/ W5 ~: z1 T                {
& i4 ]5 Q& ?5 w                MessageBox ("Get Poke Unsuccessful");
' `3 t0 _) Z4 Y: ~                return;
" f0 p" o, ]) y/ f* ~* V                }. F& e& n/ N* ?# p/ q& H

# P) x: ~; l8 i* G5 P. s/**************************传递数据给extend**************************************/7 ^0 m5 B# W3 P9 I4 p/ i
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
: r2 x' C- k: @3 }       
. ~; r! D- f6 A) }         valueStr                                 = SysAllocString((WCHAR *) L"1232");- I* \* n- O* P3 b9 D9 m% O% A
        VariantInit(&pokeVariant[0]);
7 P6 _2 T8 T- x6 V% z/ {9 m6 O2 R        pokeVariant[0].vt                 = VT_BSTR;5 s! w0 ~9 e/ u6 ^1 {9 i( S
        pokeVariant[0].bstrVal         = valueStr;
, B* K- `% P- {# P8 N
! z1 M1 e2 ]3 A- W  C         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");5 k  X9 U" ]+ E) c) C* h7 J
        VariantInit(&pokeVariant[1]);
5 g1 Z* C4 p* I7 o        pokeVariant[1].vt                 = VT_BSTR;
) D/ U5 s+ R, A" z! _        pokeVariant[1].bstrVal         = itemStr;
6 \9 W, D2 D6 p5 |
' q8 M5 S5 n; _          topicStr                                 = SysAllocString((WCHAR *) L"system");8 E0 i, _5 D$ r. T* K: q
        VariantInit(&pokeVariant[2]);
! x2 i5 L  Y- G$ I0 a        pokeVariant[2].vt                 = VT_BSTR;- ?5 L, V% D4 _9 F% M1 k0 Q! d
        pokeVariant[2].bstrVal         = topicStr;
/ G2 Y. A$ F8 F: b; V3 h, [1 y* Q0 \- k
//        Set the DISPPARAMS structure that holds the variant.5 Y. C# j$ {# ~; T! [4 Q/ ]
6 K6 d8 [' a+ p8 ?" D
        dp.rgvarg                                         = pokeVariant;& j9 W' _; S: g% }* z) N. V6 y* l
        dp.cArgs                                         = 3;7 j) Y' ?, p7 |- T; n* P/ f! i
        dp.rgdispidNamedArgs                 = NULL;
4 L2 i% t7 l4 P2 K: O        dp.cNamedArgs                                 = 0;4 d9 u0 I4 z7 x$ X" Q* f3 l  D

1 d" i/ j6 ]4 J1 i; `0 q//        Call IDispatch::Invoke()) O! F& o* F7 r+ U

8 {$ ]% X4 w. }. b! f3 H        hr = m_pDisp->Invoke(0 F% R3 u/ d$ R
                pokeID,
( s4 ?/ D1 ]  T& f                IID_NULL,
2 ]& F, Y9 v& i4 ?1 M                LOCALE_SYSTEM_DEFAULT,
( m/ t' _/ X& @' g5 c" l                DISPATCH_METHOD,, D$ \4 }6 @* L8 ~3 f
                &dp,4 u8 t+ h* _6 t7 Y* l& j% ^4 W
                NULL,/ H5 L& D2 o! \, c. w: w8 P+ x
                &ei,
  d7 M) N1 _2 ^1 g" \! i& Y( D                &uiErr);
* y+ m4 E0 v, v4 N, k1 W1 o9 h2 `' m7 p2 K: D
        SysFreeString(topicStr);" c8 |% s) J& w) W. G6 l; P& l
        SysFreeString(itemStr);3 `5 U& E& e9 P
        SysFreeString(valueStr);
8 C8 Q( N4 z2 [  s% g; ^9 m% E2 H/ L" M+ L
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
5 {+ I* A- S+ u8 \+ E7 {# R6 y) A此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
$ j  [  v( b5 U$ F& e9 r: I
$ d5 l2 P! l& [# E# S. ?! ^3 }- c: P+ y. g/ y. `$ l; D
2.这是request的程序9 p3 ]- r0 C' i8 r/ e9 }4 i& d! P
//  Request a value from Extend2 E2 f  y' v, p8 t# {# N* U
//
+ @5 @$ N( n) e4 }/ [9 v//        Initialize the variant that will hold the BSTR.  Set the variant's/ b/ m2 s9 N4 p
//        type flag to indicate the fact that this variant holds a BSTR. Place the5 b. f7 j5 e! K* t3 F
//        BSTR into the variant structure.3 L" A3 B% H* I3 Z( T

6 U! u* l5 x* p5 D% w7 ?5 w1 D/ h6 R5 u        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);0 P7 x7 a8 X6 T) [, {$ Q
        5 `  a$ k# X: A6 I& W0 {! D& R2 [
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
/ a% B1 J  z  ]3 w/ b" c        VariantInit(&requestVariant[0]); ( i- _- O1 |- R% u3 }; D
        requestVariant[0].vt                 = VT_BSTR;
( o" z  I/ j% @1 B. K- G  Z        requestVariant[0].bstrVal         = itemStr;; m/ V8 x0 C9 Z% M! Y1 |- j  @$ X

7 s% j5 u/ _- x" t          topicStr                                         = SysAllocString((WCHAR *) L"system");
! Z; L/ Y2 W/ I- C        VariantInit(&requestVariant[1]); 7 J& u) t1 ^5 i+ Z, C; {% x
        requestVariant[1].vt                 = VT_BSTR;
8 v$ Y% _1 \- j0 N        requestVariant[1].bstrVal         = topicStr;
5 }  Y; {4 `4 [4 {/ j7 x5 r9 K+ F: D0 s9 L* n- F
//        Set the DISPPARAMS structure that holds the variant.
% }) u) y4 G2 w: h+ m/ w! i+ S
1 m9 d# t$ f! W3 w4 O        dp2.rgvarg                                         = requestVariant;" M( i: d6 @/ c/ K4 S/ h4 T8 z) R
        dp2.cArgs                                         = 2;2 f. }  V# c3 N! n
        dp2.rgdispidNamedArgs                 = NULL;: U0 ^, S4 L% A2 o8 k/ d
        dp2.cNamedArgs                                 = 0;
6 e0 ~( T/ w+ o! w1 S7 N4 |7 ~+ r
& i. X: T1 v2 i8 g8 r% h8 H) a         var.vt = VT_EMPTY;, J6 I: h6 q: p

) j! X4 ~# b+ I# _+ b//        Call IDispatch::Invoke()
7 j- s8 U0 R. z. H$ }# h  A6 s' g& K5 j' ]
        hr = m_pDisp->Invoke(( z8 C1 \$ o: f5 ?  h+ C
                requestID,
! H' f7 W* w2 f+ M2 o                IID_NULL,
& O" g$ g3 W- ?4 {                LOCALE_SYSTEM_DEFAULT,
% i& _9 g0 \2 M% p6 q0 P- r                DISPATCH_METHOD,
: s, @6 Y" B1 p; p, p                &dp2,+ v$ n. U; M3 ?7 H" E( `+ O
                &var,
) C. D/ G' x& P4 q1 Z2 [                &ei,
1 a0 g- |' T( A- e% @                &uiErr);# F9 s! e2 m& k- `: h" |$ a
8 }& t* N- l) `! ]% p
        SysFreeString(topicStr);8 z1 ]1 y  d9 \9 c8 V# ^
        SysFreeString(itemStr);4 n7 c/ a5 x. a9 o4 D
请问该程序是获得extend里面的哪个值?( x" f1 J& ~7 [" N8 `; ~
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-9-17 22:02 , Processed in 0.014747 second(s), 13 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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