设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9040|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:) e& d" S# F# k$ B; z& o
Name = (WCHAR *) L"Poke";1 \" j; B% E- ^/ m
                
% r3 V+ c  K$ a- `3 ^        hr = m_pDisp->GetIDsOfNames (/ e# N1 x# k5 c7 b6 l8 g. _$ T; E
                IID_NULL,                                // reserved/ o6 f( F: q9 g) Y
                &Name,                                        // Array of names to get IDs for7 ~* n% G! T, r0 Y- ~
                1,                                        // # of names in the array4 J8 v( o1 s2 E- W+ x3 X* n% J6 }
                LOCALE_SYSTEM_DEFAULT,        // System locale: j1 h1 ~3 k( ?5 r4 N4 E( q
                &pokeID);                                // Array of IDs to fill on output
+ Y) C3 L5 Z9 q. Z3 k% F, p                       
) V' x; _# N: F2 L        if (hr)4 F& C5 p7 ~4 p+ u  y' W( S
                {
* D7 U* t# }' g, R% L                MessageBox ("Get Poke Unsuccessful");
( H$ v/ V" E0 l8 E' ?0 O% h7 b                return;
) R; `3 U/ w7 K2 G6 V: P& F2 t% s                }9 k" @4 H9 U! z

# p+ G5 x1 Z% h" D/**************************传递数据给extend**************************************/  G8 |) ?0 k  }
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);( V& D" ?7 V! e7 v
        " ~2 N7 Y9 f! v6 u3 }& `  u5 v4 c
        valueStr                                 = SysAllocString((WCHAR *) L"1232");# F& ]7 i, h* T. o
        VariantInit(&pokeVariant[0]); ( |+ M- u3 c# R
        pokeVariant[0].vt                 = VT_BSTR;
% d3 T; i+ x6 B) i        pokeVariant[0].bstrVal         = valueStr;" l* m" N4 M' x* x1 i
. z1 o& N- N/ [
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
% G( G; R; l) C. X1 u# h0 I        VariantInit(&pokeVariant[1]); . y% e6 |6 M7 N, j, G% {2 X
        pokeVariant[1].vt                 = VT_BSTR;
2 a7 q3 f# b; f: @: s4 M* W        pokeVariant[1].bstrVal         = itemStr;9 {: K* ?. Z5 ], m: ?. W
+ q) G) z% Q' B. _; n6 l) d3 r
          topicStr                                 = SysAllocString((WCHAR *) L"system");0 g% R8 b+ N& M% _- ]$ C' o
        VariantInit(&pokeVariant[2]); , c+ Z; i( ?# t* J
        pokeVariant[2].vt                 = VT_BSTR;1 c5 L. N7 s' J
        pokeVariant[2].bstrVal         = topicStr;
1 h, z& E4 w/ _- x6 |$ p1 g& `5 H% l% b; [
//        Set the DISPPARAMS structure that holds the variant.
5 @* Y& F% H: V1 X7 P! L- v) I, {% D2 h( k
        dp.rgvarg                                         = pokeVariant;
  C6 M: U. Q* l" G        dp.cArgs                                         = 3;! K' \2 |& p% c) R$ l/ d* N
        dp.rgdispidNamedArgs                 = NULL;
# A2 X- u( m6 r- D* J        dp.cNamedArgs                                 = 0;
/ V; `9 M' f6 ~2 J! z: P2 _  Y  h0 m
//        Call IDispatch::Invoke()/ \" ?( V( P, m7 z# H1 |2 O, {
( o2 P4 k! P, E- g" V- G
        hr = m_pDisp->Invoke(
( J' J; C/ _2 @* I                pokeID,6 O# T& F2 A# S. u2 b4 C* x# d
                IID_NULL,% I) N! n  P. w, W& R
                LOCALE_SYSTEM_DEFAULT,* x( P7 S. Y8 [
                DISPATCH_METHOD,
8 _* E. e" N: [/ A( U; r2 G                &dp,* C" f6 W9 [; F# P/ _! M2 s
                NULL,
2 `, F9 ]: M# }0 k                &ei,
% s) ]: r: N+ T) y                &uiErr);
' f  ~5 ^. `/ y) B; W# U: |' |, v) d+ ]* O8 ^) k! p
        SysFreeString(topicStr);
/ J( B& u) V7 i, o. o        SysFreeString(itemStr);
+ E8 r9 t" O: X0 X. L0 N        SysFreeString(valueStr);) c0 o  s9 I, A/ ^* a
* Z, ~, K. h" S7 K
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
5 D4 k/ Z& s; g2 x此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
9 w4 b2 s0 [6 S+ T  K1 s3 M, E- T! c7 F" l# m
3 K7 u! T# ^+ ?( }, z/ I! U+ j. f
2.这是request的程序% k& T" h6 F$ S! q- o  L! V: X
//  Request a value from Extend2 c( x. g: g) M) P
//+ v6 a* o6 N6 ?; p. Y. E
//        Initialize the variant that will hold the BSTR.  Set the variant's+ ]+ A6 C4 Q  V; p& u( |2 q
//        type flag to indicate the fact that this variant holds a BSTR. Place the
$ `* S5 B9 S4 q# m% V/ ]  i9 j5 f//        BSTR into the variant structure.' F. @* e* Q0 H! @

3 }& u# y& W! ~( p: t        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
. E6 t5 z8 E; S& `8 k       
) a5 w  m$ e2 c% b$ Z5 a  I         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
  {. A! K9 K; l" r; S  b8 @8 g4 ?        VariantInit(&requestVariant[0]);
! y$ N2 b# b# Y% [. J9 z% d, K1 y        requestVariant[0].vt                 = VT_BSTR;4 S& M  l0 a0 ^7 [* u
        requestVariant[0].bstrVal         = itemStr;. U" O" E  ?8 z" |  J6 {) m1 E

# C- ]8 n* @# s% q2 o2 [. k          topicStr                                         = SysAllocString((WCHAR *) L"system");% J$ G$ W1 T6 Q) _
        VariantInit(&requestVariant[1]); 7 Z0 Z/ X$ W, o
        requestVariant[1].vt                 = VT_BSTR;6 W8 C3 M  y. V# f* l$ s
        requestVariant[1].bstrVal         = topicStr;% w. @5 ?9 \4 F" t/ `+ J+ p
) `" m$ \! B& c  t
//        Set the DISPPARAMS structure that holds the variant.
; q# w$ i( D: Q, T+ }$ f8 v0 j5 v+ e5 c6 K
        dp2.rgvarg                                         = requestVariant;
. E3 c. t3 @, a' w        dp2.cArgs                                         = 2;
" j/ E" L& w5 A1 V6 v4 }" A        dp2.rgdispidNamedArgs                 = NULL;
: t6 C8 C$ C- f0 ?  w        dp2.cNamedArgs                                 = 0;3 B3 r4 F$ N% V2 {- W2 {

! f6 K- z( Q; Z  e         var.vt = VT_EMPTY;) E/ W8 O7 ~' d7 }

2 W; O' r# Z' }8 N5 P//        Call IDispatch::Invoke()2 j" E+ C* S0 o
# @8 m/ }+ _- `5 U) q
        hr = m_pDisp->Invoke(
- Z. f6 k! V* i3 D+ f4 P                requestID,( t: a7 M1 [9 \  D' T- e
                IID_NULL,: k+ }* p, L% R3 q
                LOCALE_SYSTEM_DEFAULT,* Y# c4 c  F( \9 W& Z6 [) \
                DISPATCH_METHOD,8 n/ g) z2 e4 q& X6 ^: Y5 x  I0 Z! D
                &dp2,: @) b3 t$ h6 z5 ^' n% V5 C& X% q0 n" b
                &var,
8 b, Y% [+ }( {( t; @                &ei,
9 M& O0 F$ r- ^& `9 L! _( Z                &uiErr);9 U! k0 T/ ]  {" `
1 ~% p4 U8 y' G- r8 j) t$ @
        SysFreeString(topicStr);
4 J- r/ k3 Q6 e& @        SysFreeString(itemStr);! w: @% f" Z7 `1 j
请问该程序是获得extend里面的哪个值?, Y3 T& Q8 c  ^& C# N5 ^5 Q
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-3-31 14:18 , Processed in 0.020409 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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