设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12883|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
5 f. S4 a& `* z0 z& QName = (WCHAR *) L"Poke";
! U2 J1 L! u: `" I" w                
# h8 e" ?( l& `9 f# R        hr = m_pDisp->GetIDsOfNames (9 D" z  v+ Z( D: ]8 p7 r( t
                IID_NULL,                                // reserved2 e0 v9 U% l0 I& n( E
                &Name,                                        // Array of names to get IDs for
: J% ]8 s  t' r                1,                                        // # of names in the array6 t3 i" L! l/ D3 G8 F) p
                LOCALE_SYSTEM_DEFAULT,        // System locale. V: Q( w: A: w# q" y" o
                &pokeID);                                // Array of IDs to fill on output0 u# T# Y$ c! m8 H
                        ; g" H" w6 I9 g/ ]
        if (hr): D( Y5 R2 Y& @9 |( E$ d0 b. h
                {
1 u& B' m* Y6 n( ?5 s7 }; B                MessageBox ("Get Poke Unsuccessful");
5 f9 X% j/ o/ u) q                return;
( L! f. q. q, M5 ]/ T                }
8 k" l1 C5 f1 [
6 b* T6 c$ ?. l& b$ x/**************************传递数据给extend**************************************/
- E. ^1 c3 h# h5 B. l- U$ T        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);+ B  r' a- @, R. o
       
2 n9 h0 R+ w6 ]' A  f( m         valueStr                                 = SysAllocString((WCHAR *) L"1232");! B$ R7 r% F& D% Y8 e+ q# h
        VariantInit(&pokeVariant[0]);
) D- W* B" t9 h/ R5 B! Q1 p6 F        pokeVariant[0].vt                 = VT_BSTR;
" K3 d# Z' j8 P        pokeVariant[0].bstrVal         = valueStr;
1 `0 h3 N! b4 B0 p: H) E+ U
, Y. O7 k* J) N/ `& ]5 _         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
/ m; E2 y' Z9 O        VariantInit(&pokeVariant[1]); " D& h- F% n  Y: i# Z
        pokeVariant[1].vt                 = VT_BSTR;: r0 |% P- W: r/ B
        pokeVariant[1].bstrVal         = itemStr;
7 W- [+ r; k( Q2 B! \5 U
4 |! W3 a6 z; H8 n4 h          topicStr                                 = SysAllocString((WCHAR *) L"system");( v4 s, I; j3 s8 j3 C
        VariantInit(&pokeVariant[2]); 1 x( s: X) M  L/ ?) z. X" u9 K$ q
        pokeVariant[2].vt                 = VT_BSTR;
! q/ I0 Y1 }$ z; X5 Z        pokeVariant[2].bstrVal         = topicStr;
( v, g! f9 ?9 n) `; [  z: N7 Q- P; S* S( S2 z( |8 j
//        Set the DISPPARAMS structure that holds the variant.
- y7 w: L9 v+ p7 A, |& S8 N7 x
1 |: T; j4 s9 p6 t7 P: p- @% m3 e        dp.rgvarg                                         = pokeVariant;
& J6 S7 y; @# T' {8 t        dp.cArgs                                         = 3;! G  }- b% Y2 F* l4 Y8 [7 r7 p
        dp.rgdispidNamedArgs                 = NULL;* C, X- P- e% }% N1 `
        dp.cNamedArgs                                 = 0;
. U7 y( A, l; F1 p5 o. w
. q* ?% I5 u9 _1 ]//        Call IDispatch::Invoke()0 h& z* P, O1 Z5 ?

5 x4 x0 c+ ~+ G; _# Z        hr = m_pDisp->Invoke(
- X/ H, U' X, {, f4 @) j                pokeID,. \, P0 `+ a$ i7 c
                IID_NULL,
( C. G  F# D4 F, u4 y                LOCALE_SYSTEM_DEFAULT,3 M) i; W5 p  n8 V6 I! V
                DISPATCH_METHOD,
* x# q( ]. h8 g6 [0 R7 h                &dp,0 Q9 q# l9 O0 I4 w5 ~5 s6 c& W
                NULL,
; S0 b% d( e; @& `                &ei,) T8 s( ^' e' R; H
                &uiErr);
) f. C8 T2 W5 M% v; Z1 t
& Y: R5 ]; h5 w* Y) B6 q, t        SysFreeString(topicStr);  f8 t9 W5 u* W& w
        SysFreeString(itemStr);
  f# g( ?# i! T2 S9 B# e6 W. i        SysFreeString(valueStr);
! V8 W# v9 w+ L( z% b; _. r: d+ L$ B" Q- B0 O/ R( t
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???; A. I- m3 n2 B. F; U# m! l/ O
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
3 k" H* X. |. `* N" ~" j  V/ A, G6 q+ P. j
( C% f) o3 }7 y6 E
2.这是request的程序
6 U) Z5 ~3 ~4 c- z//  Request a value from Extend
5 t% J. N+ E$ V' Q6 o//
, R, t0 N; {+ p: q: K. R) a//        Initialize the variant that will hold the BSTR.  Set the variant's- ~9 \% q" r, P- ~+ R: J* z5 h; c
//        type flag to indicate the fact that this variant holds a BSTR. Place the0 S7 C+ ^4 L. z% F
//        BSTR into the variant structure.
' p: P! R, k! U! Y+ x, b& D- j* c" T
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
" J6 f' H4 u& q# \- v( L       
, e$ |# m' |4 Q+ M. v  x# X' l         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");; [, s, @) x1 n* z1 S: I
        VariantInit(&requestVariant[0]); 4 I" s; \% N! J
        requestVariant[0].vt                 = VT_BSTR;
, J9 ?; g7 U/ s* T8 V        requestVariant[0].bstrVal         = itemStr;4 C& j( _" E: i  K0 a* b) M
. f# w) b' x0 I1 }* [1 l; @
          topicStr                                         = SysAllocString((WCHAR *) L"system");: E: q* z$ u3 N$ T3 ?4 g6 q& K
        VariantInit(&requestVariant[1]);
7 I& x+ I& e( v: ]3 l1 i        requestVariant[1].vt                 = VT_BSTR;6 v  S% d3 ~& J
        requestVariant[1].bstrVal         = topicStr;5 x5 U+ i( O' ^, a- _2 n. n$ x, {, j
: q4 G4 k$ {; {8 T
//        Set the DISPPARAMS structure that holds the variant.
9 K0 [7 a4 Z! @" h* L4 i8 r) n
        dp2.rgvarg                                         = requestVariant;
' z5 P# s6 q" L        dp2.cArgs                                         = 2;
* a: k$ s6 ?( W        dp2.rgdispidNamedArgs                 = NULL;+ ]+ V9 t5 C2 z/ s) X
        dp2.cNamedArgs                                 = 0;9 T, d# ~: @4 j9 \4 H
5 a4 {. K: G* K% g' w" ~! d
        var.vt = VT_EMPTY;% G5 v6 {- s9 Q: f

2 R- O  _/ C; z6 @) \2 A. K//        Call IDispatch::Invoke()
' Q7 \1 B6 K* o7 R, R" u: H8 B% m+ V
        hr = m_pDisp->Invoke(
0 {  S2 c9 p, I                requestID,
7 k# @. o) H" J8 \5 A& o2 u                IID_NULL,) d  ^7 f/ j  H+ h9 z, g6 C5 q( r
                LOCALE_SYSTEM_DEFAULT,5 F0 ~9 w0 i+ }9 }# U3 @
                DISPATCH_METHOD,0 y) j( c; R( p: f
                &dp2,3 e# O/ V6 Z9 N4 _8 t4 ^
                &var,
% d: F6 N* T  R. ?; F3 h3 m; G1 b                &ei,5 D  Z9 d! h, n
                &uiErr);" F! K; N, U! D$ l# z; i! O- z/ M

1 }7 k6 k0 g2 V5 u  G& u6 l" y" k        SysFreeString(topicStr);9 L2 W4 ~* y! v) _5 H
        SysFreeString(itemStr);
8 K, b. I$ ^) A- e( w请问该程序是获得extend里面的哪个值?2 N  W4 n0 y* z8 U7 w# _
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-9-3 00:58 , Processed in 0.016188 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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