设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10506|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
, [8 P2 Y; r7 A8 ~! |Name = (WCHAR *) L"Poke";7 s& n& ]* E3 J* K% ?
                
% ~+ G9 g" c! d- M/ x        hr = m_pDisp->GetIDsOfNames (6 v& ~) V5 U. P5 {
                IID_NULL,                                // reserved* R  _( z% ~; Y! l
                &Name,                                        // Array of names to get IDs for( X' H$ K! Q8 `% A! X
                1,                                        // # of names in the array
( i- }/ _0 Z' C! d2 ?: e, R6 R3 B                LOCALE_SYSTEM_DEFAULT,        // System locale7 W% A/ A4 x- g- c. u
                &pokeID);                                // Array of IDs to fill on output9 p8 o+ ~9 ]7 L" f3 a# O
                       
  X9 p" `. i( ~3 ~. C: i: e# s8 [        if (hr)
6 W" K6 e0 E1 S( ^3 ~: G                {4 ?4 q1 m; y( s& A- R! h5 W
                MessageBox ("Get Poke Unsuccessful");
: I9 O, q: b# `$ p4 j, \! F  ~# Q                return;
7 [4 J( C1 c- v9 M. C" J* e. r1 y                }4 o" N( C1 \! _( |0 X/ I0 a! i
& w: ^3 v( D5 {9 z
/**************************传递数据给extend**************************************/8 f* l, W+ w$ G# p  A1 d* F
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);2 h! x! A4 Y. N9 _
       
0 N2 o% ]) I' e         valueStr                                 = SysAllocString((WCHAR *) L"1232");6 R$ b4 A3 Y$ ?, N
        VariantInit(&pokeVariant[0]);
" j! W- N1 u6 d8 }% |/ ?2 }9 s        pokeVariant[0].vt                 = VT_BSTR;
+ M+ }$ o' k) a- m' n# X        pokeVariant[0].bstrVal         = valueStr;
4 y5 Z2 B: m& Z/ b* N: D4 v* e! k5 e4 d5 T: A& p( ]3 H
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
5 V$ N3 g) q) b* |2 l7 @7 @        VariantInit(&pokeVariant[1]); & n9 M0 f; |* ^# q6 ?) n
        pokeVariant[1].vt                 = VT_BSTR;
/ |5 t" m" X; d* b8 k7 o        pokeVariant[1].bstrVal         = itemStr;9 e) ~% s: q4 u/ J

$ ~) p8 n- w* y) B  _% U/ V          topicStr                                 = SysAllocString((WCHAR *) L"system");
; R# o+ E" s% S# L& j, ^' Z# J        VariantInit(&pokeVariant[2]);
* y( M  c0 U/ W        pokeVariant[2].vt                 = VT_BSTR;0 f3 |, c, M) i
        pokeVariant[2].bstrVal         = topicStr;
, K" W! a! s% T, E+ r' e& |' V
( Q! K( v) S7 V! Q0 n! S4 Y4 r2 D//        Set the DISPPARAMS structure that holds the variant.) N6 X% F1 K3 z, x
  V$ t2 F- S- x- k; e1 R: |
        dp.rgvarg                                         = pokeVariant;. t* J$ ?' s+ V1 H1 |4 ^
        dp.cArgs                                         = 3;1 j# t/ D# c/ u- E. [& G
        dp.rgdispidNamedArgs                 = NULL;
9 e! W" U* g  a3 t        dp.cNamedArgs                                 = 0;& L& `# M1 }( I

) l5 L+ f/ A. A. y* _) C% w7 M, b8 v//        Call IDispatch::Invoke()1 [4 D3 H" z2 r
2 ~( I" X1 A* L% \+ w
        hr = m_pDisp->Invoke(
/ ?. W; _! c9 M( D" Z+ Z                pokeID,7 N5 L: L+ G" L9 z' m% u; n0 b
                IID_NULL,
: p1 Y9 K+ h2 {) O. X0 t                LOCALE_SYSTEM_DEFAULT,
0 p/ y/ O2 p; ^1 D. S                DISPATCH_METHOD,
4 i3 G% _0 ]" ^- }                &dp,
* ^  r5 Y0 p% i. o9 E: E                NULL,
% P. T' a# K+ \: e3 @                &ei,* i; b  Q* C! ]7 \! q7 W
                &uiErr);
9 z* |9 g9 C+ j: K6 L  C$ Z
& f4 [- Q6 O9 w1 X6 O1 j: M        SysFreeString(topicStr);, ]; T6 E% B6 @/ u: x) d
        SysFreeString(itemStr);9 H. x% k8 r  c1 e1 R7 T0 N$ l
        SysFreeString(valueStr);: w0 f. g7 i$ ]3 v1 }7 F
% c" S7 u. T. i. g+ B
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???" a$ h. r$ P/ K! @# I2 a! y. q  P
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????2 z  y7 l3 {3 F% b4 K) f% o* e: g! b
- ?8 {3 O0 Y5 p9 o$ q& @

& a4 n; o8 q2 U8 P) }- R# ?7 Q2.这是request的程序
5 i& q2 n: H+ F* \$ N//  Request a value from Extend7 Y4 _; {) r9 l+ w4 t, @
//
( `5 M0 A0 p. Q' ^% f( _0 J//        Initialize the variant that will hold the BSTR.  Set the variant's
8 |! D- _- I$ D2 O; n* c$ e//        type flag to indicate the fact that this variant holds a BSTR. Place the7 P5 u! _1 H7 W. h  j
//        BSTR into the variant structure.
, }/ T0 I! b- _9 |+ Z2 Y9 o
" Z  o3 N4 @" |/ R0 {' T        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
# r% i5 a3 [& B$ U' n4 x# L, u       
( B+ u; q( B$ [2 h" o         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");" E1 E1 H7 u+ D+ C. N1 y. e
        VariantInit(&requestVariant[0]); ' _) n" _' o, h
        requestVariant[0].vt                 = VT_BSTR;4 |( N  I' x* [+ H
        requestVariant[0].bstrVal         = itemStr;% O, ^0 D$ ~) p" w# a

& S! a3 D- Y4 m# n& J  r) k5 S# @          topicStr                                         = SysAllocString((WCHAR *) L"system");2 Y2 G$ v: M& k# i& P# M
        VariantInit(&requestVariant[1]);
3 X+ e! u: `$ M0 s        requestVariant[1].vt                 = VT_BSTR;
; F- s. p1 I$ P! s- W# X3 {1 y        requestVariant[1].bstrVal         = topicStr;  q$ q8 y$ p2 x$ a8 `

$ u' Q( S0 ~* Z9 q: F4 M//        Set the DISPPARAMS structure that holds the variant./ A& b& {  M4 n- _
- E+ L8 w% \; _9 }
        dp2.rgvarg                                         = requestVariant;
! ^- q" G( m4 h. b1 P2 [        dp2.cArgs                                         = 2;
( n5 v6 F! ]3 `8 y        dp2.rgdispidNamedArgs                 = NULL;4 B9 P4 W/ D+ h
        dp2.cNamedArgs                                 = 0;
. V$ ]) t" P% @2 w7 u- q. e0 _7 b; F: \" T0 Z7 ~8 v+ F
        var.vt = VT_EMPTY;0 I# Z2 U  T# B/ }( l

8 |) o& R0 x. N6 y  v+ \* [& F//        Call IDispatch::Invoke()
8 H( G9 i* N0 C
4 P' c1 ~( i8 b: O        hr = m_pDisp->Invoke(& N3 i/ b; }/ P
                requestID,
% N+ z# i) b  y' o/ x5 ~/ ]                IID_NULL,8 i( D: s+ A- X. ?1 b/ N; z4 `- i; p
                LOCALE_SYSTEM_DEFAULT,( x/ r, L' X- f: s1 U0 K
                DISPATCH_METHOD,- H" g3 W$ c* D! G8 `
                &dp2,
: ^& b+ O$ W/ S& A! a5 ]                &var,$ v; m' ^' x( x, J
                &ei,5 n+ G( O6 Y" i: x
                &uiErr);& F& c% f2 y# v# A% ^' [

# {9 d# l1 V  _        SysFreeString(topicStr);
: P: f) p7 o! \& c, Y        SysFreeString(itemStr);# B, v9 _2 R- ]; m- f- L
请问该程序是获得extend里面的哪个值?
" ^7 k, I0 T9 ~如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-28 11:25 , Processed in 0.015376 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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