设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7810|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
" E7 `2 v" A! n1 LName = (WCHAR *) L"Poke";/ W5 O( [3 s- L( G/ [
                
/ f$ F) H. `* @, ]        hr = m_pDisp->GetIDsOfNames (4 r3 k4 a! k2 a% y
                IID_NULL,                                // reserved
* b: ^# W& |) {0 J                &Name,                                        // Array of names to get IDs for
3 s3 w& h8 }$ n. t                1,                                        // # of names in the array
, o/ z( w: M2 F9 v                LOCALE_SYSTEM_DEFAULT,        // System locale
/ U* _2 s3 h# B7 y; o+ W, E& [                &pokeID);                                // Array of IDs to fill on output
$ q8 J4 d9 d6 O7 z' J  w                        : x0 N; Y# o" X- N+ [0 X5 }5 S$ n
        if (hr), ~( @1 ?* ?- N  P
                {
! S: \! I0 N' R* p                MessageBox ("Get Poke Unsuccessful");$ Z# X( }$ l  X( d% E
                return;/ \- o8 k/ B1 [
                }
# c/ s2 q0 r2 J( M1 T7 g
/ s* X3 u! [" @0 p( P/**************************传递数据给extend**************************************/
4 j0 i1 {3 e$ a/ q& O        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);7 r2 j/ u8 a3 Q* P' P/ k4 `! V
        + N/ m- u2 G; I, k% h) _2 r
        valueStr                                 = SysAllocString((WCHAR *) L"1232");" j: J' u) h* D# D/ B/ d
        VariantInit(&pokeVariant[0]); ( O5 H2 H" ?" K
        pokeVariant[0].vt                 = VT_BSTR;
2 }  P2 c  i: R; }4 g/ x! `        pokeVariant[0].bstrVal         = valueStr;5 @% M9 M9 \. `! x' R! T

+ X% z8 M$ D" t) }; Y+ G         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");- B! m# J' Z1 A) x0 e
        VariantInit(&pokeVariant[1]);
8 w0 q/ D% ?, M2 M+ O* V1 J        pokeVariant[1].vt                 = VT_BSTR;8 r/ ?# O; C/ c/ y" k/ [' V# Q/ o; v; J
        pokeVariant[1].bstrVal         = itemStr;& K9 D0 N- M% ~4 k  z  m1 ^

' ]) N8 d$ S7 l2 B& @- {          topicStr                                 = SysAllocString((WCHAR *) L"system");- \. Z/ |: k( P7 X5 y
        VariantInit(&pokeVariant[2]);
6 E% A& B/ X. ]: b8 K        pokeVariant[2].vt                 = VT_BSTR;
$ \' G# R5 ~% c% R" c        pokeVariant[2].bstrVal         = topicStr;
. }* k' R2 `/ E4 \2 b3 N3 c& _/ o4 C4 T: c! r7 _" W0 k
//        Set the DISPPARAMS structure that holds the variant.
% J5 ?; |4 J9 J" N- Z$ e3 F
; B  \. e8 c  h+ n; ^, e        dp.rgvarg                                         = pokeVariant;
3 T8 f9 w  j" i        dp.cArgs                                         = 3;
  b' D0 ~5 w9 I. W        dp.rgdispidNamedArgs                 = NULL;' i- Y; k( G0 m/ j& T( ~
        dp.cNamedArgs                                 = 0;/ _3 {5 W2 w$ j% V9 l# P

" C8 n. a$ X1 F3 Y% ^' s7 R//        Call IDispatch::Invoke()
& o& v( W; R# y; P  n0 F
4 N  W3 L) }: e  A        hr = m_pDisp->Invoke(& l' z; \/ y7 }* [) T
                pokeID,
9 u! i% ]& B+ v4 x                IID_NULL,
/ u4 l1 b4 `8 D/ D% Q- Z                LOCALE_SYSTEM_DEFAULT,7 p* m% @  N$ M6 D* o
                DISPATCH_METHOD,
# ]: e) d& h. v- y! T1 |                &dp,
- l4 f5 g+ [# }* j' D: S5 d                NULL,$ X3 ~/ z& d* }5 u
                &ei,: A. h- D+ m; \- b% a! r  T
                &uiErr);
' q# Q7 R) ]! {8 b/ i
: I( M) D# S1 p8 _        SysFreeString(topicStr);
9 P: E7 B+ @6 K* B, d; o% o        SysFreeString(itemStr);
4 Z2 T- d5 H4 h5 u        SysFreeString(valueStr);
$ b5 I8 V/ n0 ^: g$ Y  c$ u, D% {$ c& c) _0 ^' u# f8 b4 N9 l5 ?1 M1 p. B
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
# u' `! U6 Q! r6 A/ ?此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
! R9 N9 n+ `+ @& {
* }8 }' i- Z* M7 N6 o/ s" a! Y% Q9 }7 y% P, e5 ~
2.这是request的程序1 ^. {" S( O' R& F5 N
//  Request a value from Extend) E8 w; [4 s! k% M3 ?, ?* v/ Z# {5 A
//6 `& ^7 ]  G+ _6 e/ M9 U
//        Initialize the variant that will hold the BSTR.  Set the variant's
4 b' ]2 z: b+ G. y( I: N: }//        type flag to indicate the fact that this variant holds a BSTR. Place the
- g. ]+ F4 l! E% N6 T//        BSTR into the variant structure.$ Q9 k3 D0 |. Q
, ~+ p3 e. Z; \1 I4 t$ n6 U; k. G, o
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
6 `% t2 M3 z7 Y( L( T2 u6 {! t: A       
, ]- C( i6 L3 M! l         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
- C2 B5 V$ S, K6 n        VariantInit(&requestVariant[0]); ! i% _; j/ w" J6 k
        requestVariant[0].vt                 = VT_BSTR;
7 G) W' u6 k/ @! |1 `5 M        requestVariant[0].bstrVal         = itemStr;
9 {3 j3 t; w- D: u# ?: M& C( |; ^' S( I3 ^: j- Y' D
          topicStr                                         = SysAllocString((WCHAR *) L"system");
# M9 a$ n2 [, ]0 \0 y: z& E4 n        VariantInit(&requestVariant[1]); . k/ }6 N' g4 y5 _
        requestVariant[1].vt                 = VT_BSTR;7 Q6 j8 P0 V9 B5 a  w9 b
        requestVariant[1].bstrVal         = topicStr;
8 m6 h* o& S) {1 N
; R" O# c: T7 f$ u! U. Z# p//        Set the DISPPARAMS structure that holds the variant.9 g! Y0 Q$ f; ]: T8 v  O

, N0 `- c+ j+ x        dp2.rgvarg                                         = requestVariant;8 Y* h& y* T; g5 M: y7 E+ w% A
        dp2.cArgs                                         = 2;1 M  h5 M3 Q) R* z: {. y# U/ t" e
        dp2.rgdispidNamedArgs                 = NULL;
  ^) x% u: r! N1 K+ @/ [+ Y) ?: A        dp2.cNamedArgs                                 = 0;
# j" P0 D3 H5 H5 G( g% ~$ _% K7 ]  n" ~
        var.vt = VT_EMPTY;
$ A6 \# A0 i$ ]1 H+ q" m3 f! L! i1 i* m, c
//        Call IDispatch::Invoke()
. f2 w: g" j5 X' `
5 p. b+ k! P4 ]        hr = m_pDisp->Invoke() q) G; Y/ u# k3 x% \6 ]
                requestID,& P1 X1 k; n0 r' G
                IID_NULL,: r" J/ a# w" c' H' B1 Z2 K& w
                LOCALE_SYSTEM_DEFAULT,6 Q  j5 K1 V7 Z1 z
                DISPATCH_METHOD,
) v# y; D( ~$ [, r' E                &dp2,
6 Y! X4 ]1 `9 D1 H* K" @                &var,, t% O, c( e* `
                &ei,
9 d( z/ e8 ~- g9 h. K/ M                &uiErr);
) Y3 S5 W3 [. v* b. R! a* F+ w. z' A" Z/ I6 J& U2 g& H- v* u
        SysFreeString(topicStr);
' m! E& u: W+ a2 r, U1 J        SysFreeString(itemStr);
0 Y3 m( d, q# u+ [- e$ \+ L* p请问该程序是获得extend里面的哪个值?
! F, K3 J/ W) R如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-2-3 17:08 , Processed in 0.016841 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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