设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5988|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:, Q9 {$ }; r* ]
Name = (WCHAR *) L"Poke";
) d! |' C9 t# ~                 ) z. _( j# a% ]+ D. T
        hr = m_pDisp->GetIDsOfNames (3 u7 O: J7 h5 V0 e2 u
                IID_NULL,                                // reserved& c0 ?4 T5 x/ {% B- V/ e+ d
                &Name,                                        // Array of names to get IDs for/ q8 s( w& i9 T! ?& W, L8 R
                1,                                        // # of names in the array
' H6 g2 \7 M* G$ Q* r/ V                LOCALE_SYSTEM_DEFAULT,        // System locale
, q9 X+ \7 l- z" u# u( s                &pokeID);                                // Array of IDs to fill on output: i5 l0 o3 f" N1 k% X9 u" R
                        ! b" w1 `. q) Z
        if (hr); I" z7 e+ g9 P* o4 q$ }
                {
0 M/ [" X# V$ H8 F% g! ]                MessageBox ("Get Poke Unsuccessful");6 G5 v2 @" n4 s- I
                return;
( D2 R& _3 N5 ]3 @                }
- u% g$ w9 O2 \6 }# z% }- f' ^5 H
0 }" A& I# |" i. Y" D/ e3 N. h/**************************传递数据给extend**************************************/
, B1 z; p  i) B        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);( q8 z  n) r0 S4 `) N; Z' D
       
- k) Q$ c5 q' q         valueStr                                 = SysAllocString((WCHAR *) L"1232");
0 e  {: d' {3 _9 N6 c        VariantInit(&pokeVariant[0]); ( d2 t8 n/ F. t4 K  ~1 j
        pokeVariant[0].vt                 = VT_BSTR;$ F6 M* z* Y# H5 B: K, L
        pokeVariant[0].bstrVal         = valueStr;
3 ^4 e. {% g1 ]& i/ R% R5 ~+ M3 S
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");; H! I  h4 D1 T* m" {
        VariantInit(&pokeVariant[1]);
( R  q% N! T+ h! c. X        pokeVariant[1].vt                 = VT_BSTR;( D: D6 L. F0 K/ `. r
        pokeVariant[1].bstrVal         = itemStr;
8 `9 H6 h  C. \2 G( N& z5 s# D9 {& ^8 @# r: Z5 @; ]. I9 L8 @+ ~% h
          topicStr                                 = SysAllocString((WCHAR *) L"system");' z) F7 L# _8 {/ x) q6 L
        VariantInit(&pokeVariant[2]); , K2 J+ }! `! U' H9 ]
        pokeVariant[2].vt                 = VT_BSTR;
( a3 a7 z# `0 a  q3 |* j4 _        pokeVariant[2].bstrVal         = topicStr;
! d/ O9 k2 y! {4 r4 A( x6 I7 c/ B# Z
//        Set the DISPPARAMS structure that holds the variant.
) k' P) G2 S$ j  i# S% r) ?- u& A
" g( j' S/ A. e; ~4 X        dp.rgvarg                                         = pokeVariant;
( [8 M# `# d" |& P        dp.cArgs                                         = 3;$ T. S8 a1 T" t8 ]7 |% X; E
        dp.rgdispidNamedArgs                 = NULL;
" x' o, F2 @7 i8 h& d$ o! o$ m        dp.cNamedArgs                                 = 0;( A0 j3 W, s' @: ^) C

; @3 s$ K7 u) h+ b2 I- ^//        Call IDispatch::Invoke()- j* ?7 q# i  g6 y- {
: V; Y2 z1 n9 W& s2 c) _! H' H
        hr = m_pDisp->Invoke(
+ o7 V  O  O+ V                pokeID,
* \( _9 O+ J1 S( f* T                IID_NULL,
' j1 i$ n  v, O3 y. v3 c                LOCALE_SYSTEM_DEFAULT,( E% c  k$ i+ [5 A
                DISPATCH_METHOD,
; `0 E/ q8 |* D& ]                &dp,5 a5 L4 I6 U, D# m: w  c
                NULL,
9 W0 u: A) ?* V                &ei,
1 c5 J* ?* b9 W' N3 B- o5 _+ F                &uiErr);
* S0 H0 I: U& h  X3 j' P
) j8 L9 X' A0 l4 o( g# l) N        SysFreeString(topicStr);3 C# Q; N& |7 }/ ~5 @
        SysFreeString(itemStr);; G' j9 f. W' D: ?0 n# y. r
        SysFreeString(valueStr);
& Q! B4 \0 M' }5 u5 K  {0 m. D2 J
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???; f  d5 F, f- r7 f/ y
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????! l. r) O# R2 C& L! c' C3 ~# a

. i+ I: V0 S  W: v$ B0 ?7 W" R9 x7 F
2.这是request的程序" C3 l( r0 D2 p/ P
//  Request a value from Extend
6 h. N2 @) p1 ~( X//
% G2 z& A* W) ?2 R# I. V% A//        Initialize the variant that will hold the BSTR.  Set the variant's9 \7 \( b$ s: ~/ }. t
//        type flag to indicate the fact that this variant holds a BSTR. Place the/ d' z' L) |1 w
//        BSTR into the variant structure.+ x( d  \' L9 i# }0 ?

6 I7 b8 t; F4 }9 ?        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
" I! i8 D' s: @+ z- \        8 `, W& w5 k! U4 F, H* n7 h( ?* k
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");% E9 Z3 T/ {* G: T( h
        VariantInit(&requestVariant[0]);
5 B8 p: c9 Z) y3 K! |' B8 _        requestVariant[0].vt                 = VT_BSTR;
: [+ M$ c" U1 O& |- N        requestVariant[0].bstrVal         = itemStr;
' J/ a: `( A! r; d
- B8 u8 _9 D4 r4 w; g          topicStr                                         = SysAllocString((WCHAR *) L"system");5 R* F' r- {% |+ u7 `+ ^! W
        VariantInit(&requestVariant[1]); 7 K# T1 i# d$ d* q! |- |: P
        requestVariant[1].vt                 = VT_BSTR;& w7 I0 ?6 Y0 B! |
        requestVariant[1].bstrVal         = topicStr;
) V+ m/ R* H( e' u9 X! I# t+ h! T5 M2 I& a% z! h8 ~% ?
//        Set the DISPPARAMS structure that holds the variant.
7 r- _7 t( g. d/ r: [/ e0 _3 E$ m6 X
        dp2.rgvarg                                         = requestVariant;
9 C1 z1 A( ~0 o* A8 Y1 r# }        dp2.cArgs                                         = 2;0 V# |' {, o/ j: I; G+ A
        dp2.rgdispidNamedArgs                 = NULL;$ D4 i3 s9 }8 R: O7 u6 p8 ]
        dp2.cNamedArgs                                 = 0;
3 J+ k7 _' X; V+ E4 J3 D) G3 H3 q/ j% F+ W  N; ~: `! Y
        var.vt = VT_EMPTY;
! ^, J- C, l3 ~" I- Z! U! F+ W4 c
' \4 E9 N  w0 M//        Call IDispatch::Invoke(), }: Z  C1 s# R$ R

7 C5 |- T' T- l& i7 r! F" ]0 q        hr = m_pDisp->Invoke(
3 Z( T$ n% L/ X) a* o0 F( i7 ~                requestID,
- i2 r7 m- T- i                IID_NULL,
6 B# h" T5 ~0 v# o" Y                LOCALE_SYSTEM_DEFAULT,
; c) `* `1 B2 J5 ~2 X. _4 i( ?9 c                DISPATCH_METHOD,
* G) Q0 {# l& }* l2 J. Q1 X                &dp2,; Q+ M/ \% u" z) o. y
                &var,
, C, u( _' d4 M" D                &ei,
9 d) Q- j, q2 c$ I5 V7 F5 C                &uiErr);% e! D7 ]0 [0 S! q; w1 c
: C1 l* w2 d, M7 I1 J
        SysFreeString(topicStr);; n' l* L- }. F( d( n; ]' Y
        SysFreeString(itemStr);" y. x/ {1 D# ^
请问该程序是获得extend里面的哪个值?
) O% u2 a5 r! e7 e! ~6 F如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2025-7-14 04:19 , Processed in 0.012423 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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