设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12529|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:( ]% z- R" y8 z4 g3 q2 U
Name = (WCHAR *) L"Poke";" C# z  J6 Q8 {  j0 F' O; p% k
                 0 E$ i! x; J4 e3 v, ^0 b& d
        hr = m_pDisp->GetIDsOfNames (8 M5 C& m* V' Y
                IID_NULL,                                // reserved
7 `4 ~" C0 `/ a) e                &Name,                                        // Array of names to get IDs for
7 ^5 ?7 V; M1 u% U3 f3 K                1,                                        // # of names in the array
9 `3 ?0 h. B% @                LOCALE_SYSTEM_DEFAULT,        // System locale4 y5 x$ k: o* x- h. @2 @
                &pokeID);                                // Array of IDs to fill on output
% E* R% Q# o- {$ y* q) G$ o                       
; k9 |3 V$ G8 W3 {* _0 |) H        if (hr)
$ u) K9 b  R* f) o4 \+ W: w                {3 y) M5 A# D' g3 `
                MessageBox ("Get Poke Unsuccessful");
6 K9 t/ _( |& @9 r  H                return;
* ^4 E' ^4 a# I! o% I/ B                }
; V( X) C: a4 X4 t( y: C/ ~! y7 @& E5 c2 \1 [
/**************************传递数据给extend**************************************/
% i  M# J/ e/ p        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
) Q. R% o  d' W6 Y' Z) }       
4 p# }9 |6 J9 b  F/ o0 @6 t         valueStr                                 = SysAllocString((WCHAR *) L"1232");: ~: b' D1 ~5 {2 B) |$ u
        VariantInit(&pokeVariant[0]); ( j1 D4 C" A5 f6 c! f
        pokeVariant[0].vt                 = VT_BSTR;
/ E- _8 C5 v6 ~        pokeVariant[0].bstrVal         = valueStr;/ Y% \; B( T" Y1 p
+ K* T5 F9 ]  h& s6 O0 z! u
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
/ \) X8 h# Z: A& ~$ Q! m) `3 [        VariantInit(&pokeVariant[1]); 4 |) c; o; z- g, N
        pokeVariant[1].vt                 = VT_BSTR;
/ g0 B6 x* h# a' X        pokeVariant[1].bstrVal         = itemStr;1 ], w% V9 @- I, e" n
/ p9 y' O7 D5 X" n3 ~% `8 n
          topicStr                                 = SysAllocString((WCHAR *) L"system");
5 u: ]7 M' N5 _2 c- ~        VariantInit(&pokeVariant[2]);
  R3 J9 S, \; e- G: l5 s        pokeVariant[2].vt                 = VT_BSTR;
% A9 d0 F3 n* v  m  V; y! c6 @        pokeVariant[2].bstrVal         = topicStr;% y( y( E" [, g& t0 A

' V" S; E0 D( U: m0 T6 W//        Set the DISPPARAMS structure that holds the variant.
2 m5 D$ C% {, H$ @2 s. M/ X! c
9 d; X8 ~. x/ s+ G+ {        dp.rgvarg                                         = pokeVariant;
' k$ N  S6 v9 C7 r5 X; W        dp.cArgs                                         = 3;
* U; @3 V  w% @" c2 T( ^7 v" n        dp.rgdispidNamedArgs                 = NULL;9 \' P8 m8 |9 v; }5 a8 u
        dp.cNamedArgs                                 = 0;9 E* s1 u' w. J

& F' a: t, ], ^+ u. \) e/ F) e//        Call IDispatch::Invoke()
) q# G- Q2 P% Z
& @, g% B" k. ~( o/ `        hr = m_pDisp->Invoke(
+ j, M1 _2 h0 {7 i                pokeID,) _) Q0 Y5 P/ \) P4 ~4 F9 k
                IID_NULL,# @. F/ }2 K( [* `" e/ n0 H& n
                LOCALE_SYSTEM_DEFAULT,+ H: F' Y. d2 {7 D6 D( w
                DISPATCH_METHOD,
" ]/ x5 t% S  `& r* r& ^6 r. |                &dp,
% F( f, o7 r5 m6 y# K" F; n                NULL,
# V0 f3 d; D6 S6 Z  O4 X  w8 Y5 i                &ei,, G% _  C0 w/ n; k
                &uiErr);- I7 A2 u. f+ P; Z) S
! K8 ~! g  P9 C5 T# F* I
        SysFreeString(topicStr);% k, @% Z" d, d* G
        SysFreeString(itemStr);' [3 Q5 I# T8 ]8 q9 v
        SysFreeString(valueStr);
. @$ S! m9 A0 |- }
! ?# K, C- n  f1 s- W现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???2 J4 X' c0 f: ~) [8 o6 f- J9 {% `
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
. j( n9 q$ H! i2 U0 O3 F3 k+ }) q; }2 e/ {2 I9 ]

" T( J- f& {) Q2.这是request的程序
) L7 ]8 [4 L! X! t! {: z//  Request a value from Extend+ G" J7 r+ x$ B4 A( K9 N0 ~
//  F% T( [+ d; `- u
//        Initialize the variant that will hold the BSTR.  Set the variant's8 x, @2 z8 X% Q( A9 Z/ O6 K
//        type flag to indicate the fact that this variant holds a BSTR. Place the
2 w3 i0 ~' X% P0 K//        BSTR into the variant structure.3 |6 [7 B" [/ e
: P6 @" ]0 @0 L% s9 H3 a
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
! J$ t0 b1 W4 K" a        / A. ?! W; y( \5 a5 B6 ~
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
5 S' g. b! h+ m  |) e% X+ @6 R$ S        VariantInit(&requestVariant[0]);
. J6 @0 m+ G1 q  X% p        requestVariant[0].vt                 = VT_BSTR;1 c) W0 |% I- A4 q, R
        requestVariant[0].bstrVal         = itemStr;
& L, W1 ~8 U/ ~* ~6 X! z5 ?& N9 H1 H
          topicStr                                         = SysAllocString((WCHAR *) L"system");; A" b( Q  z" U/ B0 J" `( Q4 O% x
        VariantInit(&requestVariant[1]);
$ b0 W/ Q6 K# {, w        requestVariant[1].vt                 = VT_BSTR;
) N! E. C) c* t2 N7 j! O# {9 R+ L, n        requestVariant[1].bstrVal         = topicStr;7 r5 n3 i' k5 C
" d+ ~6 m5 E; O6 {! ]9 I! u! q% J
//        Set the DISPPARAMS structure that holds the variant.
. O2 n1 ?" P% W: H4 d8 z! ^! n
        dp2.rgvarg                                         = requestVariant;
: z  J) v! U% K% {3 N) b% |        dp2.cArgs                                         = 2;# P6 t' k$ B' D; Y* n, c
        dp2.rgdispidNamedArgs                 = NULL;
/ w6 K7 w$ M; U; n        dp2.cNamedArgs                                 = 0;
- o! x+ ]3 h& U, K. v
- n8 B4 K% g9 {: H' D4 l9 G         var.vt = VT_EMPTY;8 }" |8 c1 l# G0 }: l
5 T- c+ b" @: X. G" g
//        Call IDispatch::Invoke()
0 M7 d; [4 {7 q5 |6 d! O8 ^: ?' V# j$ f, U
        hr = m_pDisp->Invoke(' o  R1 O7 b+ Q: T, h) _* c
                requestID,
7 t5 k9 m; S7 p: b% w6 b% M                IID_NULL,
% z( K: Y+ s) t. \                LOCALE_SYSTEM_DEFAULT,5 q0 e6 o# e  o. A' F8 u4 P4 D7 j
                DISPATCH_METHOD,8 i* M% G3 a! y# s  y* M
                &dp2,
: d/ w2 V  f. \- y; r3 y5 `  w: k                &var,' ?- q) q' I" z
                &ei,
, J- A% I/ n9 [) v! I3 Q                &uiErr);
$ M( O5 c0 w: a0 b4 v3 k/ [) [8 q" m) @: S7 E. C
        SysFreeString(topicStr);
* \4 e  |7 D' }' \        SysFreeString(itemStr);
  T5 L2 |% j. r5 O9 E( f请问该程序是获得extend里面的哪个值?
9 m7 c* Z9 x) E) G如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-8-17 06:27 , Processed in 0.018864 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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