设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13235|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
& z6 r0 W% B) \4 A9 {4 AName = (WCHAR *) L"Poke";/ _; l1 X+ M4 o" U* U
                 4 T( \& T, g- c. E! J
        hr = m_pDisp->GetIDsOfNames (
7 p. W  r! @; s  B4 J                IID_NULL,                                // reserved0 F1 Z8 F0 F" }9 E0 V9 s
                &Name,                                        // Array of names to get IDs for
6 U( D" x6 |' f, x3 I% ?, N                1,                                        // # of names in the array6 S/ i& O4 }  J( z, G: |
                LOCALE_SYSTEM_DEFAULT,        // System locale
. h3 \8 J( `  [4 @% P+ N                &pokeID);                                // Array of IDs to fill on output
# J" v6 l, v" ^- l; c- o, E% W( v                        6 t& U! E3 d, L  O* D6 I6 E3 N
        if (hr)
/ T+ x- o, A; W; b3 l                {
/ }2 A6 Z: T6 P* S/ n) U5 A                MessageBox ("Get Poke Unsuccessful");
; d  r/ j: H( Y( \' B5 ]( Q" u                return;$ Y4 J" @' H) t. w3 n$ Z
                }1 M! c+ f6 C) u( h4 e- }3 r

( I+ Y4 {( ?: O3 t/ o- d/**************************传递数据给extend**************************************/
' c4 R3 @- |1 l; u        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
+ M1 a) u# x, k        3 c4 N: U$ [; ], G  w, w$ g
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
0 i! A* Q+ s* {2 C* W        VariantInit(&pokeVariant[0]); 1 _9 \1 P; j. k" ~/ I
        pokeVariant[0].vt                 = VT_BSTR;; r. n1 r  ~. Q+ L2 t! A
        pokeVariant[0].bstrVal         = valueStr;7 G$ t* D& G0 y( L! O7 u

0 Q3 W' d4 O8 h" [: Q& ?' a         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
1 F: I6 }7 }+ t1 M: i/ ]0 z! d' w) `        VariantInit(&pokeVariant[1]);
  ^* I3 D0 z0 C        pokeVariant[1].vt                 = VT_BSTR;, [# g$ F9 t1 P" N* r* l
        pokeVariant[1].bstrVal         = itemStr;6 S/ ~0 N  f" ~* o3 g8 t6 G; Y( ~% S

0 \$ k$ M( K0 g* r: `. }1 M          topicStr                                 = SysAllocString((WCHAR *) L"system");- t. g/ F- t! |8 W* g
        VariantInit(&pokeVariant[2]);
, d  P( M2 j* o. G0 C        pokeVariant[2].vt                 = VT_BSTR;
% z: V! A1 O0 w. N5 |        pokeVariant[2].bstrVal         = topicStr;' u/ h, t8 l5 v. x5 W

/ k/ ~: ~# M8 ^  Y& I2 X: j2 ~//        Set the DISPPARAMS structure that holds the variant.  I! a$ Z" I' D

! o7 Z, C6 ]' I" @$ _        dp.rgvarg                                         = pokeVariant;
4 Q8 Z. |* u8 [; A  E5 r+ D        dp.cArgs                                         = 3;( l8 J# ], c! N# h5 T+ x
        dp.rgdispidNamedArgs                 = NULL;
% f: g) _3 Y2 m) j( d        dp.cNamedArgs                                 = 0;# V+ f% t6 p, \& y
3 M: _- r3 x* X/ i% O. a
//        Call IDispatch::Invoke()
( V+ w) c8 \  B5 A, q2 q# [9 d% L+ C/ r" S2 S/ [8 x( b7 m
        hr = m_pDisp->Invoke(
! a) E- i8 Y  x4 L% Z, @) g                pokeID,
6 M$ z) u. w. A                IID_NULL,8 F9 y* J9 H" B. e: K0 Q* y7 Y
                LOCALE_SYSTEM_DEFAULT,
0 |3 l* m* r4 g7 E1 W3 q8 s9 m                DISPATCH_METHOD,
0 b( ^$ n* o7 e8 O& A1 c                &dp,# E" b8 v0 S  {4 D" l, D
                NULL,2 }5 w! b, t+ i4 d3 G& C
                &ei,- C1 d# J. D+ @% U
                &uiErr);
4 G2 X; X" E$ z- x- i, X# n" b9 b! ^2 X4 f+ b6 s  d
        SysFreeString(topicStr);: F- Z# J8 N( h% O) P" u
        SysFreeString(itemStr);' \( ]* d8 p5 j" D1 W
        SysFreeString(valueStr);7 m9 X# V9 f! m, i0 o/ p
2 l0 }5 M% m- e+ t
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???6 m! I5 R6 ^8 g7 r& l  |
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
& S( O& t6 j& d! Y4 V# ]
+ p# Q: p/ q2 b* K7 a3 h7 P: [0 M! Y' _: E) E& ?9 D# s5 G& A8 b  j
2.这是request的程序) j( C# v, R( W, a
//  Request a value from Extend
9 k4 k: {  y, \5 U* @  A% E//
9 o: }3 |0 _& D: M8 u. g" I) o//        Initialize the variant that will hold the BSTR.  Set the variant's
: s+ a8 g9 Q3 V7 F( F) g//        type flag to indicate the fact that this variant holds a BSTR. Place the
) e9 C3 ^7 t/ I//        BSTR into the variant structure.
: U, |8 E6 r; C% e  q1 t7 r" `8 i$ i' O; S  |* C$ f6 N  c
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);& P' N4 P* H) G8 P9 \7 B, |8 Y8 _
        * A3 N/ Y7 K+ ]5 {' ^7 S/ ?
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
/ \0 g0 D4 \7 }5 h' Z5 r* c% D        VariantInit(&requestVariant[0]);
* J, z- u; m6 z" x3 T. D% M        requestVariant[0].vt                 = VT_BSTR;' g# P6 J- ^$ T9 {: }
        requestVariant[0].bstrVal         = itemStr;+ k% M1 I+ |) O% L& {+ t0 q; @

/ H6 x& O/ o3 D4 e: \6 ^( w7 ~          topicStr                                         = SysAllocString((WCHAR *) L"system");# t# _5 X8 W, t/ w2 M- D! Y, e
        VariantInit(&requestVariant[1]); 0 b4 P( l. u) ^4 d
        requestVariant[1].vt                 = VT_BSTR;3 s$ ~! }/ R% v1 |
        requestVariant[1].bstrVal         = topicStr;
, w* }3 A& T7 b8 e  f: N* M2 t4 J' H' X2 Z: p& M2 G, |" L' z
//        Set the DISPPARAMS structure that holds the variant.
2 n/ G- k0 Q( f# d- }/ v+ E& v( @, t2 \- w0 o' Q& {: L) R
        dp2.rgvarg                                         = requestVariant;
( q; ~7 [4 L& z4 C        dp2.cArgs                                         = 2;( _* P5 y: @+ \
        dp2.rgdispidNamedArgs                 = NULL;" j5 l" \5 ]% n  k" E' f6 H6 q; r
        dp2.cNamedArgs                                 = 0;
6 l1 K2 p' }7 k* x( V
4 S9 V3 P2 s. S0 L4 g: Z+ e         var.vt = VT_EMPTY;# Z. p, \. O7 D2 k

( n) U. t% J8 A! N+ ^' G: W//        Call IDispatch::Invoke(). M8 N' z: V9 U3 h3 \. A  j
7 k, {- O' ~6 c' ]) [* X) o) j
        hr = m_pDisp->Invoke(- `% Y2 }  F2 _2 J$ s/ P; p
                requestID,
- }& Y! U' B+ ^                IID_NULL,/ t$ J! x) T  m! m' G4 S/ I
                LOCALE_SYSTEM_DEFAULT,3 F9 D7 j& R' U' G) x
                DISPATCH_METHOD,
" v  O7 e4 @$ i                &dp2,
) P9 F6 h+ K9 f$ j! r2 f/ Q6 s) c                &var,
2 [, w/ P, e4 G. h* {3 |3 k) z                &ei,- I4 D4 Q! |( t9 u9 @% t/ y
                &uiErr);
2 g; ^) r- E  L( A1 R3 h4 p
# R; D% |# B; o        SysFreeString(topicStr);
2 C. D% f6 ^" Z  }. x% {        SysFreeString(itemStr);6 J- O4 g, K# a) Q9 F) U
请问该程序是获得extend里面的哪个值?
& }+ J0 S5 M8 a* f( `如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-9-18 12:28 , Processed in 0.018693 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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