设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10665|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:7 q% u9 @- G( Q  K
Name = (WCHAR *) L"Poke";
9 z- o5 v) f. W6 r) W5 m                 2 E7 T1 p( T( o, z
        hr = m_pDisp->GetIDsOfNames (# f" b: {" e! R2 q
                IID_NULL,                                // reserved
" g0 D" Y8 i. g0 B8 O                &Name,                                        // Array of names to get IDs for) R: U5 O; p8 B/ }6 c) Q
                1,                                        // # of names in the array& ]0 r& l' J! G1 t0 ?& L; r) l
                LOCALE_SYSTEM_DEFAULT,        // System locale
4 `  n7 ?& d4 w  s( u                &pokeID);                                // Array of IDs to fill on output
# c* h# D( o5 q7 T0 W                        1 _! o+ E( x/ Z# X5 e! D- h2 D$ a
        if (hr)( r! A, s4 P% Y+ o
                {
( Z6 n: m" T$ Q4 V" `( M                MessageBox ("Get Poke Unsuccessful");
+ N0 E8 F/ J; J$ P) h                return;
! Y2 H4 d: Y# V) W0 r                }
* a2 i6 r. Z9 L& B" v, ~0 M
, z, l+ B* h6 }/ t/**************************传递数据给extend**************************************/
6 |! P$ s& H4 @' i2 h/ R        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);9 H3 E5 Z) p3 {9 j0 O
       
( T* I* k8 T$ d: _: N( r+ k         valueStr                                 = SysAllocString((WCHAR *) L"1232");4 G) Y9 n4 M2 b; l5 f" N
        VariantInit(&pokeVariant[0]);
& s; N  V+ y) @: J$ e0 F        pokeVariant[0].vt                 = VT_BSTR;0 n1 I+ }# M7 H& G( m( D9 _& i
        pokeVariant[0].bstrVal         = valueStr;0 Z* t% X9 `% k9 g9 z  T9 f' l3 j
% B+ Q. {- f0 J% A; M6 \
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
9 a$ D$ W, X" `- @9 h6 F: |        VariantInit(&pokeVariant[1]);
- c9 B! ^" W- i; l( v        pokeVariant[1].vt                 = VT_BSTR;
% d" P* ^5 P! T6 Z" r3 @% k/ a        pokeVariant[1].bstrVal         = itemStr;
# h0 {0 j, x; B# T8 s+ p. d4 F" X+ V5 z' Y6 o4 a
          topicStr                                 = SysAllocString((WCHAR *) L"system");
% q# p$ q- m5 w7 u9 [, L        VariantInit(&pokeVariant[2]); . m7 h7 a# P3 i  R! M9 D# H
        pokeVariant[2].vt                 = VT_BSTR;
, w7 S' C% L8 W4 V$ B8 F/ B* {6 A+ ]        pokeVariant[2].bstrVal         = topicStr;
9 j5 ?: i+ x' S7 N, V
( m8 b5 O# k% K' c//        Set the DISPPARAMS structure that holds the variant.
4 V* c/ f/ w7 b; C
. X% c, G0 Q7 ]( T) Q. G        dp.rgvarg                                         = pokeVariant;5 r) m1 ]4 E7 P: W7 K
        dp.cArgs                                         = 3;$ P; c+ i  v' S% v
        dp.rgdispidNamedArgs                 = NULL;
! [- ^# W, R/ Z        dp.cNamedArgs                                 = 0;
' i; a& J5 C2 l. x0 v1 x  {: I. |2 k2 G% ?2 b" D7 \8 S9 t' Q+ I
//        Call IDispatch::Invoke()6 g; Q( d4 U  x! o

' E$ h/ C" m( K: v4 C' ]        hr = m_pDisp->Invoke(  j, ?/ r: Y8 J/ A- Z  ]% i2 s
                pokeID,! ?& d  ]6 P, n3 Q
                IID_NULL,
: G! t# S3 z. G3 V  S. O: @2 t, M                LOCALE_SYSTEM_DEFAULT,9 y4 l# S  s5 n0 x3 V: q
                DISPATCH_METHOD,
& z5 e* t9 @2 B8 p                &dp,
" A) C( U; U5 u4 B/ q" I9 |- K3 K+ q                NULL,% _6 E$ Z3 d6 t
                &ei,3 v  g' V1 [: m( M( N, R" M
                &uiErr);
, l0 L3 M4 D3 ^* ~
9 |6 x' ?" I5 V$ d: A        SysFreeString(topicStr);
! c9 d7 [# c! m; `0 H4 t9 U1 F3 p        SysFreeString(itemStr);! q. A$ z7 [3 E9 y9 |0 m  w
        SysFreeString(valueStr);/ e1 B) L1 c" _: L* G

: X. |. t& G' b6 B& [现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
+ ~7 y; x2 _1 g/ f: E/ v- @& k& W此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
- a  i( J9 |( ?0 E& o1 C
- e5 i8 k/ R+ O4 ^3 [% }
% H' j% u2 ]0 h+ H% z$ Q  o2.这是request的程序
# a" S! |' E, ^6 D0 S//  Request a value from Extend  ^8 |8 D6 ~- c+ I4 B& Z- p
//
1 L3 H4 ^# W6 v8 i( ^$ G//        Initialize the variant that will hold the BSTR.  Set the variant's  n9 j9 U! i8 H8 \# v
//        type flag to indicate the fact that this variant holds a BSTR. Place the. a& H1 ?! I% n& `5 G( N6 n
//        BSTR into the variant structure.
) ?0 w; B' g  q1 a
. g' o& N! H0 H  g        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);# K0 i# X( r4 {6 r5 f1 ]$ t( g
        " e/ y2 D  g$ L5 N1 i
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");( ?' f' m9 ~" g6 E$ j3 U( v
        VariantInit(&requestVariant[0]); " h2 b: x) R' _6 A" M9 M* z
        requestVariant[0].vt                 = VT_BSTR;
; b; a0 b) r* B9 K* u0 z        requestVariant[0].bstrVal         = itemStr;
) q: @, C1 G& N3 A' Z  A2 Q2 h7 I( Q; ~/ ?- \% `
          topicStr                                         = SysAllocString((WCHAR *) L"system");: a, K" r$ H; x! L: v( P  o
        VariantInit(&requestVariant[1]);
5 N+ V$ ?7 q0 d% C) K* {4 ?        requestVariant[1].vt                 = VT_BSTR;' o& B+ e3 Y/ a6 D) M
        requestVariant[1].bstrVal         = topicStr;7 c; G) M$ z. _  b3 t7 X; G  R; ~

5 r5 `) Q& w2 G, q//        Set the DISPPARAMS structure that holds the variant.  _! K8 J3 {1 o% L+ O
% O8 E1 P2 Y! o+ E1 r6 G
        dp2.rgvarg                                         = requestVariant;( h' G) I* R! i* ?
        dp2.cArgs                                         = 2;
2 n' Q+ @, A  T; X8 P" R  S        dp2.rgdispidNamedArgs                 = NULL;0 Q. W+ h# f* m5 l
        dp2.cNamedArgs                                 = 0;
" a$ j  B- V( S- v( w* I# r- R' c: ^* B* V; c( @, L$ T
        var.vt = VT_EMPTY;: k! X7 n0 b6 W$ F
! [' Z$ m* J. o4 a- S; `) m
//        Call IDispatch::Invoke()
8 d- w$ F, }0 N$ D$ G, P; @3 H, \/ ^" [  e7 B( M8 ^+ h
        hr = m_pDisp->Invoke(! U/ C0 z" x, e
                requestID,
/ J( k- d, D+ i                IID_NULL,9 V5 i( x9 t8 p% Q
                LOCALE_SYSTEM_DEFAULT,! G  E5 x% m% y7 ^! [! h
                DISPATCH_METHOD,
8 V$ v, q" x8 i% s% K* A                &dp2,
" V7 p3 Q! q5 D                &var,
9 l( S- a  Q4 {$ {( l- V                &ei,& b% ~% v) N. r# @
                &uiErr);
0 a4 x4 P3 ]  I/ r  c7 u$ S4 u0 i! B
9 {6 A& p+ [8 o( h! t        SysFreeString(topicStr);6 ^( f. ~  f9 t7 s! K
        SysFreeString(itemStr);
8 W/ @& k  ~6 R9 n' O) M, a请问该程序是获得extend里面的哪个值?# w" O" z" `9 k8 O. u5 w7 c" u- s
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-6 10:47 , Processed in 0.015691 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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