设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8468|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:7 e; P2 M' V. q
Name = (WCHAR *) L"Poke";
2 F9 S% n  D' ^8 [4 N7 b( F                
' J- a  N# \8 d- X* [3 W        hr = m_pDisp->GetIDsOfNames ($ v- @& B/ T- ?2 y: w5 F8 l3 S
                IID_NULL,                                // reserved
" E; M+ z2 S9 @7 m* d2 j% E                &Name,                                        // Array of names to get IDs for
- L$ q/ v& e' A, u( }* y                1,                                        // # of names in the array
- U0 C0 b2 H" g, U4 l                LOCALE_SYSTEM_DEFAULT,        // System locale; L, q& ~, M- s3 r! M6 f
                &pokeID);                                // Array of IDs to fill on output6 E& K, k( }& J! ?3 `  B* C
                        2 i  U6 }5 b, `# Q
        if (hr)
4 J7 `7 ?& B8 X                {
3 F( X4 @! b, U  {( U! o2 B& z7 j& k                MessageBox ("Get Poke Unsuccessful");
2 M8 N, j) K' M5 `7 u- i; k, h( V                return;
/ c3 ~+ `% |6 k3 `! d                }+ K. L# T) V# p7 T: Z5 A6 F9 x

6 U8 O# U0 ^% Y9 i5 o' G/**************************传递数据给extend**************************************/
7 I' {0 p9 y0 r# ]( @        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);* d0 }6 T! d+ K! i
       
/ Q0 U7 e; \: v         valueStr                                 = SysAllocString((WCHAR *) L"1232");4 R* B! {* |1 o
        VariantInit(&pokeVariant[0]);
2 c& d$ Z$ s3 y6 y* u) V. E        pokeVariant[0].vt                 = VT_BSTR;, B$ S: v7 V; b5 E2 B9 `0 P
        pokeVariant[0].bstrVal         = valueStr;' b/ u' H) A4 S, j- n, R

4 w2 j3 a, l, }* D  }3 w4 F         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
1 P& z7 ^9 i* A0 J5 Y        VariantInit(&pokeVariant[1]);
3 m. T5 q9 n9 @; f2 m; _        pokeVariant[1].vt                 = VT_BSTR;; T6 @" l5 C3 J+ ?
        pokeVariant[1].bstrVal         = itemStr;1 E' @: `; v+ i% K+ R" U. d
$ \2 R( Q' Q/ E+ G6 I! H1 y2 P
          topicStr                                 = SysAllocString((WCHAR *) L"system");
5 K5 e( m/ x$ C  e2 a        VariantInit(&pokeVariant[2]);
2 A1 k# {2 s& D$ ]8 X% i# X% A% r        pokeVariant[2].vt                 = VT_BSTR;
* v6 C$ u2 Z$ t2 C: d! ~) y. f        pokeVariant[2].bstrVal         = topicStr;
. D; n+ O: p7 [# z8 l
7 |0 c& B. E6 b! W8 o) N% w//        Set the DISPPARAMS structure that holds the variant.2 D- ]* m$ V5 ?8 }. c
+ {' X4 i( {& G% T
        dp.rgvarg                                         = pokeVariant;) C% ~6 K' k) Z! \  @
        dp.cArgs                                         = 3;
9 t) Y0 H% a" S6 d3 l; w        dp.rgdispidNamedArgs                 = NULL;
7 _6 \  [- f- g& z  B0 J        dp.cNamedArgs                                 = 0;, d: z2 {, Q$ }

! ~  q, w* D4 Y' q% m//        Call IDispatch::Invoke()# X! `+ B/ q+ G/ U5 O* S. K

+ g) M% `& N+ Z5 A/ R        hr = m_pDisp->Invoke(
" N8 s: ^. b' _: D9 v$ i( @1 J* M. g                pokeID,& x# i5 P" I$ D! b0 z# u
                IID_NULL,
& F- I8 a2 e8 ?$ q, l( o' q                LOCALE_SYSTEM_DEFAULT,1 b" R* k7 e9 T. e# V
                DISPATCH_METHOD,# u0 s- [; g! n
                &dp,
. q! e) e6 O, `                NULL,
/ B, I; Y5 U- Z                &ei,
+ t6 l" X2 x8 ?  I                &uiErr);
3 Q4 n& l: R7 @. V& H
! X% B- G) C& V: y* V        SysFreeString(topicStr);
. O: w) U) O8 M( T        SysFreeString(itemStr);
" ^3 O) S6 L. F" h        SysFreeString(valueStr);
) {) k. W) d$ F0 e" |/ C
4 N5 h0 F. c" I, l; y现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
) a5 R! u& {1 |1 a& |- O, @% i: x此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????+ h4 z" ?1 h. m) y- R. l- X
: R8 e8 n- v. j+ `

3 q, v* l/ C+ b" Q0 Q9 \9 d6 V2.这是request的程序; y8 B8 M. {9 l1 [+ I
//  Request a value from Extend5 Z- r. N' q# e4 J# v1 @! F# C
//
9 u. y; ]( f- E  l+ y# I- V# _//        Initialize the variant that will hold the BSTR.  Set the variant's
/ n* w3 E9 R( O; {//        type flag to indicate the fact that this variant holds a BSTR. Place the# ?& B! n7 i; q
//        BSTR into the variant structure.* h4 j% A7 x8 V( D* d. u- _9 r( a; L

0 i5 }# d. C2 I9 P1 u        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);9 Q, Q. }7 s3 |5 M
        0 p8 p9 u# |! @5 n- w4 Z9 d# q3 U
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
- R9 L+ a! k$ }! Y+ H8 ~! b        VariantInit(&requestVariant[0]);
- ^) k: D; }% U# j( J        requestVariant[0].vt                 = VT_BSTR;
- x  @( D9 y7 M; W" |( O" q        requestVariant[0].bstrVal         = itemStr;' U! F4 V/ o' \& A5 R' I6 }3 g! d0 ^

. x: I$ ?) c. Q- Q1 P( ?- v% }. r5 D+ C          topicStr                                         = SysAllocString((WCHAR *) L"system");
0 J1 H$ i4 A0 h, S- m. J        VariantInit(&requestVariant[1]); " O1 {* G0 B+ }; c, ]! G6 i. A
        requestVariant[1].vt                 = VT_BSTR;
+ O+ o& @: V( ~; k# X3 j! B        requestVariant[1].bstrVal         = topicStr;; m+ t2 X$ H0 u% o
7 n( h; _1 N+ S
//        Set the DISPPARAMS structure that holds the variant.% h2 K" p! C% N
8 K* A) k8 G! y
        dp2.rgvarg                                         = requestVariant;
2 r1 S% I- G2 r7 ]& T2 @  K0 n        dp2.cArgs                                         = 2;6 }6 g& @, r0 t$ F$ F2 T2 a. p. _
        dp2.rgdispidNamedArgs                 = NULL;' ?& Q' q' `8 J* X: r
        dp2.cNamedArgs                                 = 0;; Y+ y! z/ y9 U# s

: g! p8 F# A9 o& Y7 x4 D4 g         var.vt = VT_EMPTY;
" P; f0 Y# G, C: f) r
# Y, U) F4 C4 ?) d& o4 t. V1 H/ i: L( z//        Call IDispatch::Invoke()
# E. i6 H" t5 N8 d/ D% a" A: `* U7 j6 o' Y0 ~7 v# m- m( V7 T9 a
        hr = m_pDisp->Invoke(
# I" ?, C2 I+ ~" {                requestID,
* [/ q9 h# ^' A% l                IID_NULL,# x3 m, x  q3 G' \  g
                LOCALE_SYSTEM_DEFAULT,
5 d3 u8 O+ l' V% X; X* z                DISPATCH_METHOD,4 d9 I! `; T+ i/ `, d6 g
                &dp2,
2 H  N! h1 L; _- j  k( n9 @+ x                &var,
- A$ k3 [6 @, }7 a' G% F# z                &ei,! G9 p: ^& U1 _  @. B/ j
                &uiErr);
4 g; j" r8 Y5 R5 `* A8 X7 T7 ]8 A6 Y% P. ~; i- Z
        SysFreeString(topicStr);% E2 u7 T) a. S; L2 q" _
        SysFreeString(itemStr);
9 z& M$ F6 l  u% S请问该程序是获得extend里面的哪个值?" w" [$ N; O) f7 }8 `6 J1 S* c
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-3-2 06:40 , Processed in 0.017536 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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