设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9893|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:9 `& U. r8 T% b- V7 n9 u
Name = (WCHAR *) L"Poke";0 h: T& m$ z$ \+ T1 I+ [: X
                
) G( b/ X6 G+ }; o- F4 b        hr = m_pDisp->GetIDsOfNames (
6 _; D  V8 e- v4 j                IID_NULL,                                // reserved
0 l# s4 ?5 F& U1 I, O                &Name,                                        // Array of names to get IDs for9 _5 k5 f/ q8 N, j
                1,                                        // # of names in the array- G  T* D7 z! F6 t1 h
                LOCALE_SYSTEM_DEFAULT,        // System locale" _4 V/ d7 Y, j8 \" ~
                &pokeID);                                // Array of IDs to fill on output) }; j8 W+ ^2 o4 o
                       
6 X; {5 G8 V% |! l5 b        if (hr)
$ [) f5 m/ o9 A; |& B$ w. U                {3 E3 Z6 Y9 f8 u) S" t. Q2 Q
                MessageBox ("Get Poke Unsuccessful");# b8 C; f9 G) u1 O; C: X2 q* G
                return;
' E+ K! [3 C6 g5 k5 \4 K                }, ?1 Y$ y. Z% [) [  n! J+ V

( z; K1 n% g( t8 C/**************************传递数据给extend**************************************/! r4 J$ ~. b' I  V) M& w
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);; g7 S3 E( o3 _  _1 _& X
       
1 y" A  V  W: h8 P1 e' e! u& t         valueStr                                 = SysAllocString((WCHAR *) L"1232");0 f7 Q. c; o8 }* v
        VariantInit(&pokeVariant[0]);
% e) R) X7 l0 I3 p        pokeVariant[0].vt                 = VT_BSTR;
0 s+ `8 ^% M. v/ w/ _: O* g        pokeVariant[0].bstrVal         = valueStr;
8 F. v5 C& X2 N( ~" z+ J
, O  f3 q! |$ U# U* }- a         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");" W1 S. v) {. y0 u, r7 W9 ]
        VariantInit(&pokeVariant[1]);
$ b1 |6 K: @+ z        pokeVariant[1].vt                 = VT_BSTR;4 h1 c; c, W" u% {8 A
        pokeVariant[1].bstrVal         = itemStr;- F" \" z* z8 t; @: a

. I2 R' X0 G: j% \$ D/ _          topicStr                                 = SysAllocString((WCHAR *) L"system");
7 g4 B6 N3 G, r3 M        VariantInit(&pokeVariant[2]); 3 a; e5 z: L4 M, A
        pokeVariant[2].vt                 = VT_BSTR;
, i2 t8 {1 v( k. u        pokeVariant[2].bstrVal         = topicStr;
' H- @, L$ ?7 }* K, j, t6 t6 u' H" i& d; m5 d6 u
//        Set the DISPPARAMS structure that holds the variant.1 d" a8 Z( N5 P# {1 [

( }# q3 U" K; J  W        dp.rgvarg                                         = pokeVariant;; O- q7 D7 d  f
        dp.cArgs                                         = 3;, q% a$ q" a. p9 O) m  y1 B
        dp.rgdispidNamedArgs                 = NULL;# ]% @1 w9 \5 F
        dp.cNamedArgs                                 = 0;0 D! ~6 i- t( _6 @8 N) C* m/ C4 Y

( e5 A2 r& [# S//        Call IDispatch::Invoke()6 x3 H9 s; O9 g+ y( l2 l

5 _2 ^1 e8 ]: S) _( a        hr = m_pDisp->Invoke(  k6 j- _& t' f9 |' v# P6 k- O
                pokeID,
3 ?; ]- T3 ~5 X+ @# i                IID_NULL,
2 ^- d& J3 w. X9 Z                LOCALE_SYSTEM_DEFAULT,* G% h0 h* Q* p, W$ W1 f) s
                DISPATCH_METHOD,& c$ `/ ?+ W& k' ^$ @& _  E
                &dp,! N' \, T6 G; o
                NULL,
& N5 C5 e6 y) ?7 {1 s8 P2 k                &ei,4 V, U% H7 Y7 a; G5 W! q8 a
                &uiErr);
- I3 b1 |! k" d/ W/ u* B# _
3 n' w# q- d4 K9 u2 {7 E+ [        SysFreeString(topicStr);
9 N4 k. y/ [5 [3 q+ o9 ~( t  u$ W        SysFreeString(itemStr);
, k9 V$ E% x* y% {* k        SysFreeString(valueStr);
( r6 m3 {' G, }2 V
+ ^: h3 l$ Y/ m, i- k: U* l现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???; J- o9 A# }1 C6 n1 o
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
$ a6 T3 W  e* T) a9 x, f% d+ d; F- E  W8 \/ V) q# K1 }

- s; z# ]& q# ]/ A6 o1 H" m2.这是request的程序, h* K8 x6 a& g4 t8 x
//  Request a value from Extend3 `& d1 V+ n* _* C: m: G
//; Z  `8 G; Q/ M0 N% ]
//        Initialize the variant that will hold the BSTR.  Set the variant's4 ?# a4 O/ }6 x/ f; c4 t1 P
//        type flag to indicate the fact that this variant holds a BSTR. Place the
) ~$ P& X" G" E9 G//        BSTR into the variant structure.
0 ?  G5 E7 g  Q" g
7 K" B$ |8 Y5 F" C  D+ F( |8 Q        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);& ]3 t  {' d; z/ v
       
5 V7 \$ h* N! R' x8 W         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
- C3 |) V. k  n$ z* N        VariantInit(&requestVariant[0]);
- Y+ |( }' z5 B2 T+ U        requestVariant[0].vt                 = VT_BSTR;
* ^5 y& c! z& L  f* l        requestVariant[0].bstrVal         = itemStr;
5 u5 C4 n$ ?' G+ ^$ h4 O- T6 y4 z6 n& S; _; ]. q: _0 n4 e$ D
          topicStr                                         = SysAllocString((WCHAR *) L"system");* Z6 O$ l2 t9 U0 `% H, ~
        VariantInit(&requestVariant[1]); / g! y6 I) @5 J7 U8 y8 M
        requestVariant[1].vt                 = VT_BSTR;
4 z5 ]7 J: F9 X! l        requestVariant[1].bstrVal         = topicStr;% j$ k- V8 W* n( u) ^& @

) w2 w' b) q. O3 C//        Set the DISPPARAMS structure that holds the variant.
1 s5 I7 R  `1 E0 X% e7 L! w7 i
$ Q3 S, r/ \4 d& S; N' r6 r5 X        dp2.rgvarg                                         = requestVariant;" y6 G/ q# e- G% R( V( W! u
        dp2.cArgs                                         = 2;4 y" e5 ]7 c2 ^% y; S
        dp2.rgdispidNamedArgs                 = NULL;; I5 i$ [, Q8 R7 w$ M+ }
        dp2.cNamedArgs                                 = 0;% t' X0 w: H9 J9 o
3 w: e2 ?$ u, S2 }, _7 Z: b) f$ E
        var.vt = VT_EMPTY;1 l, U& p1 ?: S  }: l
$ T% F( A& o" v
//        Call IDispatch::Invoke()" F2 o1 J- y+ T3 O( ~
' Y2 [+ l- D  _
        hr = m_pDisp->Invoke(
. K; G7 |7 @( D  Z5 b                requestID,2 M2 e% p. R) m7 |7 R
                IID_NULL,1 r0 W* |, {. X  s% Y  O& p
                LOCALE_SYSTEM_DEFAULT,6 `. d: r, s3 \  [4 F4 I
                DISPATCH_METHOD,
2 R# B8 s8 K" W                &dp2,4 i3 c3 Z  [' j$ v# ~
                &var,5 u9 o9 ]" S8 b! V2 C  [# x/ {0 [
                &ei,
) W/ H7 u' y% [! c4 j1 E                &uiErr);/ ?  W. K/ C! m+ U
9 m: K) V% H7 r* u1 W, D5 R9 K
        SysFreeString(topicStr);! {: L: m$ i# `8 X+ R' Y% t$ [3 l
        SysFreeString(itemStr);# `, v& j7 y5 t( H) Z, U
请问该程序是获得extend里面的哪个值?0 F7 l, I0 x: \8 K1 M0 ~: b' x" i  X( {
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-3 17:46 , Processed in 0.018424 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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