设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10617|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
4 Q& g4 e- x0 D( z, jName = (WCHAR *) L"Poke";& C$ W  F. F" C# g5 W
                 7 I7 f  [" T7 _
        hr = m_pDisp->GetIDsOfNames (
+ Y2 E, A% q1 W* F0 t                IID_NULL,                                // reserved9 L5 a. o  k& I4 G3 k4 |* s8 M
                &Name,                                        // Array of names to get IDs for7 x" B6 L( V( K5 R9 J, G
                1,                                        // # of names in the array
! b: s  ^  y# s                LOCALE_SYSTEM_DEFAULT,        // System locale
* V3 J7 d2 z1 v+ Y6 P( t; o                &pokeID);                                // Array of IDs to fill on output; u5 x8 a" D! u% g, _8 V! I
                        * e0 q0 A1 w, B# w( c# t* H
        if (hr)' i1 S2 v# P8 p4 q
                {
, M; e. U% ]# s0 h( D# o                MessageBox ("Get Poke Unsuccessful");
1 I' v- H$ I8 N5 O! K                return;
7 f- L7 @" ~8 c: k# U. |+ |                }4 H0 I2 @& `: n" w
+ Y# R, j" N+ ]
/**************************传递数据给extend**************************************/0 j4 i+ ]6 b/ e- o" L3 N; _- ~
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);4 a. e' K* e" f6 A; T7 g- h
        4 b# Q; q( w- {. G5 i
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
6 w  x2 u+ K( ]% W$ I5 i. X        VariantInit(&pokeVariant[0]); , Z, ^0 K: h0 o, C5 R/ S% J* V
        pokeVariant[0].vt                 = VT_BSTR;
* c7 p& x4 _$ ^" x! K7 }        pokeVariant[0].bstrVal         = valueStr;
! k: v; T; ]+ w5 h( p2 z
8 I7 C4 I( H0 {% v         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
; y" G( F( q) K8 e& \7 f$ k4 ?        VariantInit(&pokeVariant[1]); 5 v, s% L* N) n0 ^% u9 |( h$ N# H
        pokeVariant[1].vt                 = VT_BSTR;
$ u% Y! Q* ?/ g        pokeVariant[1].bstrVal         = itemStr;
& O' k1 s8 A: o& k
7 T, u, W( a+ Z7 t  F7 C          topicStr                                 = SysAllocString((WCHAR *) L"system");, k0 S+ g. `! Z6 \  k
        VariantInit(&pokeVariant[2]);
. l. N1 l. [8 S. R( |4 o        pokeVariant[2].vt                 = VT_BSTR;/ W% w( n/ y+ }( O5 ~) l
        pokeVariant[2].bstrVal         = topicStr;
4 T/ s4 r. I8 ^
( [% k9 v2 `7 i1 f4 G: G//        Set the DISPPARAMS structure that holds the variant.) z0 }' X$ {# n- \: d+ z
3 N' o5 k. g4 r( S+ F
        dp.rgvarg                                         = pokeVariant;6 Y7 x: }' R( @+ q$ j
        dp.cArgs                                         = 3;; @; J) c: m9 m" q2 ^  x
        dp.rgdispidNamedArgs                 = NULL;
) f1 D" x, F, J/ `( I4 O        dp.cNamedArgs                                 = 0;' l9 H' I; Y0 Z

, k0 |5 C4 P7 b: _0 I4 T//        Call IDispatch::Invoke()) V: N5 `, R; Y% E. D% g' F' ^

" T8 v8 w9 ^* P        hr = m_pDisp->Invoke(
/ N( _) n" p2 s0 b$ q# l% h( Y                pokeID,$ e: d) P8 Z! e: B
                IID_NULL,. z' j5 Z* d! X& e* X* a: s
                LOCALE_SYSTEM_DEFAULT,
" ^) ]! k9 R. _6 q                DISPATCH_METHOD,
( o% q; y7 T! Q0 n* A                &dp,
" T& T5 B. z( R. g( B8 ^                NULL,
. y- s# Q4 n4 Q- o, [                &ei,
- u. R+ K) N# {" a' j! `                &uiErr);
& t# x9 j" z  \& q+ S: G1 b6 L8 @0 x/ ~: j) b! G* c# p3 i. E
        SysFreeString(topicStr);/ _+ |* P. M% W! R! o
        SysFreeString(itemStr);! ?: g" o  M, z, V$ {
        SysFreeString(valueStr);4 A& j9 w! P$ B; h* `# S
3 q% q  w4 b* h2 v* [9 r$ u
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
, _  o! e9 a$ ^: M+ x& a此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
9 M  h* n; B7 `/ [8 |0 [9 M, X8 |7 N# |# c
& S* s$ ~! m9 w) k- w
2.这是request的程序5 o5 T- b5 g: b; _
//  Request a value from Extend
3 \/ H/ G6 r! }//
. X! f1 G5 S6 l//        Initialize the variant that will hold the BSTR.  Set the variant's2 W0 s0 r4 f9 B" R
//        type flag to indicate the fact that this variant holds a BSTR. Place the; ], a! t% p& g: _
//        BSTR into the variant structure.
: h. P- N7 n0 ~4 i$ O& {$ y6 i3 Y4 q6 W- B6 C1 W  p
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
. a* R# U" K& D! U5 ~' c       
; q6 V9 A8 r8 k         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
5 v$ ?0 i1 \; }+ G5 K1 L        VariantInit(&requestVariant[0]);
. |  r: s1 W3 i        requestVariant[0].vt                 = VT_BSTR;
4 j' V/ m; w# M6 c  s        requestVariant[0].bstrVal         = itemStr;
2 v0 [" E  ^3 [: z% Q% ?1 x! b% E" y4 L1 Q2 O$ |
          topicStr                                         = SysAllocString((WCHAR *) L"system");  L7 w1 I% j- X+ ~
        VariantInit(&requestVariant[1]); $ @$ a% N6 o; |0 t  v, ~
        requestVariant[1].vt                 = VT_BSTR;) t+ S6 l( I) J! @
        requestVariant[1].bstrVal         = topicStr;' C* D4 c8 p+ l% }+ h: ^( e! D
2 t0 |- X. s/ y! ~. b
//        Set the DISPPARAMS structure that holds the variant.7 _8 s$ Z7 w% \* |0 x+ W  I: k
; i! V' d' X. @) ]3 E
        dp2.rgvarg                                         = requestVariant;
( z1 U( n: Y# k& z& T- w1 R% d        dp2.cArgs                                         = 2;
5 `6 }" j) S- [9 Y" a        dp2.rgdispidNamedArgs                 = NULL;
4 ?# e; ~9 I6 d$ `3 e# P) V        dp2.cNamedArgs                                 = 0;
; |5 f2 R" s" T: _' g2 p1 ~$ a  p( F6 H! w
        var.vt = VT_EMPTY;. l- k6 f$ x8 w. y9 O
( x- v2 _) c6 [) j8 F* ]
//        Call IDispatch::Invoke()
5 l2 B2 w2 L; r0 A! G0 Y/ X. ~
4 e2 p+ `; d" w$ M/ ?) k' g7 n        hr = m_pDisp->Invoke(" Z: r$ E! O4 v9 _& G
                requestID,1 T# a" ^& r& s6 y
                IID_NULL,
$ |; o  L2 P% z+ n                LOCALE_SYSTEM_DEFAULT,# q0 _: i3 v# j" D1 ]! t
                DISPATCH_METHOD,7 u2 U8 _/ }# a* K7 P
                &dp2,5 N/ g6 Q  D6 N
                &var,
" e/ l! ?7 U" `; j5 o9 l0 Z2 Y" h                &ei,
, X- n# ^& g1 w& y9 v- V                &uiErr);) t& K! B4 J7 C$ N' {, s& ?

* s$ ?& v- ^, H* W3 h        SysFreeString(topicStr);
% Z5 Y) `' X% }# H        SysFreeString(itemStr);
4 e* g$ `. w" ~0 T8 ?" W4 @请问该程序是获得extend里面的哪个值?" W! E+ ]; _9 j. m+ T2 Z- ~) H. |
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-3 18:07 , Processed in 0.015404 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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