设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6587|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:' c0 N% o( n0 t+ V$ U; \
Name = (WCHAR *) L"Poke";! @+ U8 U& w( Q0 m& X" V
                 6 n# c1 P& N- z9 w$ h, O
        hr = m_pDisp->GetIDsOfNames (! X, e+ X+ D7 H8 u, j: w/ z
                IID_NULL,                                // reserved
  g# z" y8 X+ L) v( D# F  F6 J                &Name,                                        // Array of names to get IDs for. T8 r' u# V9 D. V& H
                1,                                        // # of names in the array7 p. v0 K- E  X/ q8 B' c; c) ?
                LOCALE_SYSTEM_DEFAULT,        // System locale3 n( O, V* Y' C) c
                &pokeID);                                // Array of IDs to fill on output
# O& w/ ~* d9 y8 F' G1 Q                       
: t) g& t( D+ U3 J" l0 [        if (hr)
4 D3 o5 T8 ^% f; @# i# a                {
5 Q$ K2 U( F7 Q6 v6 S4 p                MessageBox ("Get Poke Unsuccessful");* |1 ?1 @" K, v& A' k1 Z
                return;( V/ G6 X( L$ ^" o5 n3 ]9 b' E
                }
, D1 _/ P3 n. H* @, p( ^& r1 d- _# H- _' f, c
/**************************传递数据给extend**************************************/8 I; p" {- S& h' L9 b
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);! M. z, e" \9 b9 j2 X: }- {7 N8 |
       
! _6 k! d5 r% ]2 S( o5 q  K) v. q7 z         valueStr                                 = SysAllocString((WCHAR *) L"1232");
" _/ G6 }; `* s1 A. B$ `        VariantInit(&pokeVariant[0]);
! |+ i. }+ W  r5 v! L        pokeVariant[0].vt                 = VT_BSTR;
; ?8 ^& o- D& N! ^; L& W- g        pokeVariant[0].bstrVal         = valueStr;
" r/ U7 E. j! {' y( ~
) S* f" E. v/ S: N, |         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");+ d* N9 S* G( s+ E  T
        VariantInit(&pokeVariant[1]);
! M9 d7 t8 R/ A( H7 p; v: f. x        pokeVariant[1].vt                 = VT_BSTR;* n7 r4 L" D: Q; [4 [8 K( A* K$ r; r
        pokeVariant[1].bstrVal         = itemStr;) n- H( E- \$ Q8 R7 w* F

3 H& J0 A9 d. U! ?& q. c7 j          topicStr                                 = SysAllocString((WCHAR *) L"system");( K! |2 m# J8 B/ D
        VariantInit(&pokeVariant[2]); 3 f1 k+ |8 A7 e) _% Q2 m
        pokeVariant[2].vt                 = VT_BSTR;7 W. ^: I; @9 W
        pokeVariant[2].bstrVal         = topicStr;
7 K# `7 A* Q) B5 x$ J- x
( W% R! t8 O: J//        Set the DISPPARAMS structure that holds the variant.
+ \* C; j3 J6 z# y( w( {0 m: i6 L, n+ {* D
        dp.rgvarg                                         = pokeVariant;
! B5 k' j: s4 z( Y        dp.cArgs                                         = 3;+ r6 F, M. |! e2 x; W6 F
        dp.rgdispidNamedArgs                 = NULL;/ N  x8 r& r  K; R( ], b% G
        dp.cNamedArgs                                 = 0;
) ^8 \( p2 D5 R  W# w3 w
* r# b+ x- L, A4 W, x1 r//        Call IDispatch::Invoke()
. q' q: ]' i$ ?+ ~, V* z( @& X: k. e8 ?6 j) C: m  Z4 h4 z# [& x
        hr = m_pDisp->Invoke(3 h, ~9 `$ Q2 ~0 H
                pokeID,5 u- a' U' q( F& w' ^  k) C- n; M; j
                IID_NULL,+ H! S) ^: |& Y% Q
                LOCALE_SYSTEM_DEFAULT,
2 E: N1 M; ]% F  P                DISPATCH_METHOD,' u6 ^% q+ P3 L- b7 ~
                &dp,6 ~- G* `) ?9 r
                NULL,
( `5 i: d  Z+ H0 @7 w9 X/ D                &ei,2 V$ O, p7 ]- i/ G/ Z. A% i
                &uiErr);  O4 Y: [% S- {. W" `% G# N* q- ^+ S

2 Q/ V/ j$ S' P& D; P        SysFreeString(topicStr);. y( i' O" a8 \( n4 _& z- B$ H
        SysFreeString(itemStr);
3 O" N) a  K0 j7 {        SysFreeString(valueStr);
' K% s( d7 @/ z0 F+ {# a0 g: V9 v$ P  m: A
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???/ ]6 F+ {) g. O( O
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
( }3 P& V1 w7 g7 o% F& a4 d+ @4 D* h4 z+ h" c, r: a$ e
7 _, R2 ~" ^) o$ u
2.这是request的程序
8 U* t" |& u8 R) S( B//  Request a value from Extend
$ w5 Z% ]- y+ H0 ]$ f* }//( J: i# b9 ~' T. h6 |2 Z) E1 g
//        Initialize the variant that will hold the BSTR.  Set the variant's; D& j& o' S- b. Q9 {
//        type flag to indicate the fact that this variant holds a BSTR. Place the
9 b8 A4 Q' [& o* b; r//        BSTR into the variant structure.
+ K2 Q* [: J% ]/ {
) I) n$ p7 `! G* ?- y: ]' p7 O        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);4 J" C* u8 G* k
        , r. j8 r5 z0 C" o7 c, ^4 O+ X: q
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
' a1 _7 H! f. n        VariantInit(&requestVariant[0]);
# |7 D  t7 n# U3 X' d        requestVariant[0].vt                 = VT_BSTR;
( l% w0 h- b$ s        requestVariant[0].bstrVal         = itemStr;' f6 ]. K/ N. l, G6 @. Q

0 d% [* |8 e0 E9 t          topicStr                                         = SysAllocString((WCHAR *) L"system");
, N, Y, H+ e' i' t4 O0 t$ a        VariantInit(&requestVariant[1]);
) T9 l  ]3 }/ P9 q. B) A$ n        requestVariant[1].vt                 = VT_BSTR;
$ q: c* W+ X9 m. l% C3 o        requestVariant[1].bstrVal         = topicStr;
& _4 ]5 M+ c6 ^2 K& }8 L
% Z" p, W% y/ g//        Set the DISPPARAMS structure that holds the variant.
) r8 [9 O3 D" K3 t* a8 N' c7 j' u& ]8 I' e
        dp2.rgvarg                                         = requestVariant;+ j  X) B) K8 i- |# |' T( T1 x
        dp2.cArgs                                         = 2;
9 ^8 e* z! B2 l" b. I0 C        dp2.rgdispidNamedArgs                 = NULL;
" |0 g$ m+ i, q; F) l        dp2.cNamedArgs                                 = 0;
8 g5 D* K( j7 w: S9 e7 c
- g: F* ^' S9 h8 {" Z         var.vt = VT_EMPTY;
) z! @  q0 a/ Y6 ?1 C3 R' A1 s
3 e& x+ A  W/ t/ Z% M0 c" F7 k% H/ B; {//        Call IDispatch::Invoke()
1 s4 O2 |3 O" z4 ^
+ `* k; \) |) I) q. z        hr = m_pDisp->Invoke(
  A6 {" D2 j  q7 J                requestID,7 A! d  |. i9 h
                IID_NULL,
2 d% [% V6 G( S6 l( \                LOCALE_SYSTEM_DEFAULT,
" s- U- X0 V, x, X                DISPATCH_METHOD,+ ~' H0 S6 o2 `- V, K( W
                &dp2,
: G% m- D! k1 p! W                &var,: Z9 j" }  q: f- K* F/ K
                &ei,9 n7 u5 n' O. _3 @% p, O  j  a
                &uiErr);: v8 T0 M" ~2 f* h

' e: X* a+ {; {) o        SysFreeString(topicStr);) w. P) M* E  Q. H& d; ]' U
        SysFreeString(itemStr);6 h# o0 r, }; r9 K" \
请问该程序是获得extend里面的哪个值?
7 \  u; P1 a9 y5 ?如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2025-11-18 08:30 , Processed in 0.018126 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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