设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8042|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:. ~, M2 ~6 ?8 w, q" f9 y8 w( t. |
Name = (WCHAR *) L"Poke";
8 c# U5 R- O, q4 e4 u                
6 `: {! L* Z+ y        hr = m_pDisp->GetIDsOfNames (
6 P# ^7 {( O( X; d                IID_NULL,                                // reserved3 H3 e- {' b$ |. r
                &Name,                                        // Array of names to get IDs for
7 X# X- T, _7 C1 M) f  `  b                1,                                        // # of names in the array; U, h; r( c" v0 i1 X9 t9 m+ Q
                LOCALE_SYSTEM_DEFAULT,        // System locale
' x+ |& T# G- d9 T3 h, r- C0 v                &pokeID);                                // Array of IDs to fill on output
2 V) J: Z/ L1 M! i+ z7 S3 O                        2 f8 t4 m- z$ ^
        if (hr)' L( q. y8 z3 [
                {
; b" v2 W. w6 N% C1 t' w                MessageBox ("Get Poke Unsuccessful");
& Y2 w  l% H4 o                return;4 F/ p! \, o3 c2 j: s" p
                }
0 e0 k( }. M% e/ c. h3 W! l# r6 g: I( b4 @9 x
/**************************传递数据给extend**************************************/
5 B! O6 x! e- {& ?2 A; e% F        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
* O: t6 n* H- @2 F$ w2 G8 w  J3 n       
6 v1 c+ `) ?+ {6 U7 O  `         valueStr                                 = SysAllocString((WCHAR *) L"1232");
$ L9 C+ P& Y7 v8 o, G        VariantInit(&pokeVariant[0]); % Z9 {- s# P1 U9 o/ T/ ]6 r  J) }
        pokeVariant[0].vt                 = VT_BSTR;/ z3 u* r: f5 l
        pokeVariant[0].bstrVal         = valueStr;
: j* D1 A# u" V( Q* v) t) d: x  U# W1 J4 R% X' T4 H7 C7 ]8 Z; d2 |+ ]
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
& y/ ^+ [" E- R        VariantInit(&pokeVariant[1]);   \3 \3 q% _' I' W( @9 B
        pokeVariant[1].vt                 = VT_BSTR;7 D( Z" A5 [- E2 }) z, y
        pokeVariant[1].bstrVal         = itemStr;1 T$ r8 k3 p* B/ g

$ O& N9 [% W% a# Q          topicStr                                 = SysAllocString((WCHAR *) L"system");3 t# o$ x8 \3 [  `& p, w
        VariantInit(&pokeVariant[2]); " r8 h( V+ t3 u4 ~6 N/ H  D, V2 W
        pokeVariant[2].vt                 = VT_BSTR;
, s4 l$ h+ ~& n  n  j. A        pokeVariant[2].bstrVal         = topicStr;# n* n! T) S& ], s7 ?

! X- p. h! p' L//        Set the DISPPARAMS structure that holds the variant.$ T0 s) l: r2 R, K+ T

* S9 J5 o/ U; I' S        dp.rgvarg                                         = pokeVariant;
0 F3 J7 e7 }  P$ c1 d7 L) N1 k: k        dp.cArgs                                         = 3;1 \/ P7 T5 O9 X4 e9 \
        dp.rgdispidNamedArgs                 = NULL;7 U7 I& Y0 ~0 ?+ b
        dp.cNamedArgs                                 = 0;
# }! q  Q/ v$ q* ~/ m& j) ]: r8 p' ]
//        Call IDispatch::Invoke()+ }, a7 C$ X  ~) `3 b6 h
9 H" g. y& [; E
        hr = m_pDisp->Invoke(2 J2 a& F0 G* ^9 }3 p
                pokeID,
, |* h! F4 [/ c                IID_NULL,# `( E9 }) x" \& L" U
                LOCALE_SYSTEM_DEFAULT,/ `: D# _( x$ v
                DISPATCH_METHOD,
( y& _0 }3 h# l. R                &dp,
$ s4 z3 [7 x7 L5 Y( J  i& h                NULL,! ^; Q( s4 [) V6 g; _1 N
                &ei,& }- I1 G+ B* L; A; B
                &uiErr);2 [; f" D. H6 o7 |: ~- F: k: y

( z2 m7 h2 q: m4 v; n. X; h        SysFreeString(topicStr);
4 A& w7 a) d, J3 R" Z6 F        SysFreeString(itemStr);
2 D, v' _( X% F/ H& U- a        SysFreeString(valueStr);
0 m. ~5 N6 S6 z2 b& \" a( D$ |) n) O. s
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
6 l# z9 K6 `% u/ X  A此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????; D4 M& e9 a8 j$ Q5 p
5 j$ g6 v( s1 M2 [* y
6 ~& M! X: w# T2 N7 F
2.这是request的程序
( j) E  W& D$ w4 S: [- N' O//  Request a value from Extend% [0 l  i& E' j
//6 ^2 Q& B* S. `+ d: z7 K' T
//        Initialize the variant that will hold the BSTR.  Set the variant's
* W4 @! D2 M2 F, h0 E, y//        type flag to indicate the fact that this variant holds a BSTR. Place the
8 [3 c7 Z$ e- _) ?' {- e//        BSTR into the variant structure.
* A9 }5 E- H% `" {2 a" p+ ?
$ b2 I$ Y" ]% M/ I2 V3 T2 B" S        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
0 e( n- k- F+ F: }9 n5 J        6 }* g+ M/ O: F! D  _9 e
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
) b8 o. ~5 e4 e4 A; O  @* _        VariantInit(&requestVariant[0]);
/ C: t# j+ p# e4 L( _        requestVariant[0].vt                 = VT_BSTR;/ m) z  f+ e  O$ S6 J; h8 [
        requestVariant[0].bstrVal         = itemStr;, X: o- t& U8 t& ]8 Z' ]6 C

$ m8 J! Z% U: T/ o6 q" d          topicStr                                         = SysAllocString((WCHAR *) L"system");& a5 w0 m5 H  A1 S
        VariantInit(&requestVariant[1]);
/ p& v9 S7 G: T( D3 c' R; l        requestVariant[1].vt                 = VT_BSTR;
8 e' x2 B8 f6 v$ X( m& M6 `( B& d        requestVariant[1].bstrVal         = topicStr;3 w* N; q1 V' B/ B8 b

& |/ q6 M( w4 V7 g* D5 K+ C: Y//        Set the DISPPARAMS structure that holds the variant.
" e# Z0 }0 t6 F+ E) t6 Z% d9 g0 ?2 c$ J
        dp2.rgvarg                                         = requestVariant;
9 R8 i3 V/ C: }        dp2.cArgs                                         = 2;
7 C9 l2 Z% c& L0 f5 r1 O  i- C        dp2.rgdispidNamedArgs                 = NULL;' f. H* T! z; r3 T" M& T
        dp2.cNamedArgs                                 = 0;( ?% y0 O$ X5 y1 U: f6 c
% c6 V! y0 r; G- C3 D' R# C
        var.vt = VT_EMPTY;5 G2 T( ?4 m) s; E4 u* H! w5 q9 a

, ~. g- d- X6 @: m7 Z//        Call IDispatch::Invoke()  |4 }+ ]0 g/ L* J

( p: \. M' R+ u! n! ?# Q        hr = m_pDisp->Invoke(
4 E, Y5 O7 i2 W5 A& s% r                requestID,& f8 C6 f6 a% e( V4 `
                IID_NULL,7 B0 G; p% z5 Z3 Z) h$ O: T2 }* ~
                LOCALE_SYSTEM_DEFAULT,
4 i9 o# s: P5 W& B2 s0 V, y                DISPATCH_METHOD,
* s! b  _" u  n4 d+ N                &dp2,5 _& w2 \2 A" q' C: J
                &var,( c$ x6 G* N4 I4 o0 V
                &ei," ]3 Y/ v+ i0 [4 b7 A
                &uiErr);) i- M/ f$ f5 o) R7 c5 O
8 `! R, J8 F2 y" m/ a$ v
        SysFreeString(topicStr);/ X9 _: w% |' V- {- D2 `( h
        SysFreeString(itemStr);. D; F; W6 ]$ X7 c  T
请问该程序是获得extend里面的哪个值?) c1 q6 {# n# p
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-2-12 09:48 , Processed in 0.016928 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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