设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12415|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:6 F& J$ F: ^% `0 l9 h
Name = (WCHAR *) L"Poke";
8 S% q- v/ s8 a+ j* \# Y                 + Q* E, c' L8 E" {, ?
        hr = m_pDisp->GetIDsOfNames (
; F0 S$ J5 |' R6 X                IID_NULL,                                // reserved. G4 j% K9 L9 F0 \6 U4 b: r4 \
                &Name,                                        // Array of names to get IDs for% ]& N7 e7 g& ?$ v$ K% h
                1,                                        // # of names in the array
3 d5 ~( q7 |* a3 K, t( g                LOCALE_SYSTEM_DEFAULT,        // System locale* z: Q: z0 m/ ~% f: X6 Q
                &pokeID);                                // Array of IDs to fill on output3 P% {! t+ g9 a0 Y' S/ t9 v
                        8 {$ p2 T$ h' b. {6 y
        if (hr)3 D/ q0 }3 M8 m: c9 }* q- H
                {. V! K( }8 g' S- |+ w
                MessageBox ("Get Poke Unsuccessful");
% r- b  x% p9 J: m) K+ D4 O                return;3 E0 a/ P. x% \* Q
                }# C5 P" T. y& M, Z9 ~( x: l

# f- P- |0 G+ m5 L/**************************传递数据给extend**************************************/% o1 \6 w" ]' p$ i' @% _
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);# H# H. w, u3 C( b
        0 N/ F: T. c5 E6 }9 t/ x
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
+ A; [& s& Y1 O7 j2 W        VariantInit(&pokeVariant[0]); 5 o6 |8 ^4 [% X% X3 l7 p8 ^
        pokeVariant[0].vt                 = VT_BSTR;' n2 e' q( n& r- z# V3 I( Z  y( L
        pokeVariant[0].bstrVal         = valueStr;+ v8 s% M. Z% \

2 G7 E& X2 ]. }" g( K1 m1 n         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");6 z/ s0 z& M! j8 C. \6 I
        VariantInit(&pokeVariant[1]);
4 V' W/ o/ l! D; j  B) I        pokeVariant[1].vt                 = VT_BSTR;
; U0 x& O! v" z" A; p( }  u* d        pokeVariant[1].bstrVal         = itemStr;+ D* M$ [) U0 B. H) F
* t% A, k5 P9 t/ \
          topicStr                                 = SysAllocString((WCHAR *) L"system");
8 ^( d. c: Y8 n        VariantInit(&pokeVariant[2]);
; t1 m2 e3 L0 \, J; X        pokeVariant[2].vt                 = VT_BSTR;
6 k3 d! t# q3 I% Y        pokeVariant[2].bstrVal         = topicStr;
8 s7 U9 \5 a6 b& f% g% ^/ ~# d
. F& D1 q3 A6 \//        Set the DISPPARAMS structure that holds the variant.
% ]4 D& A$ K: [, [* o8 t! d! m6 H" J7 T6 P9 l" p
        dp.rgvarg                                         = pokeVariant;+ J0 }+ y" S) j* d
        dp.cArgs                                         = 3;, q' z1 b" I3 }4 D& U2 \
        dp.rgdispidNamedArgs                 = NULL;4 B' S2 d1 m; D  B9 P
        dp.cNamedArgs                                 = 0;9 ^( i7 `% \! M* X# m

" m! x+ X( [- s0 T8 s$ B//        Call IDispatch::Invoke(). T$ m7 R# z6 v5 {

$ w8 Y; G" Z) \, |4 O" J        hr = m_pDisp->Invoke(, ]2 k" E" t2 z2 q
                pokeID,
; r$ g( Y' v& B                IID_NULL," e) ~" U3 O- D0 O/ A
                LOCALE_SYSTEM_DEFAULT,, ]. b9 y, @* p7 ?3 x& a. h
                DISPATCH_METHOD,
8 V+ e- J" L# l9 c/ J, I                &dp,  H+ ~- t3 Q( \
                NULL,( c4 \' _7 d7 ^" z7 r
                &ei,
  J6 F* x8 V' [" O/ V& J8 {                &uiErr);0 F/ a8 E! p/ O0 J

$ O& ~9 Y, j0 i7 x0 m9 a) h        SysFreeString(topicStr);( |6 g* W( g* r& P. `8 `" h
        SysFreeString(itemStr);6 H* R! X3 n. C  K( [# T4 k- {
        SysFreeString(valueStr);
% Y. P6 \4 N) N1 o# G
' u9 C' t. z. I% t7 N, S现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
6 }+ G: C1 S5 r5 P/ Q6 z- e7 A# k此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????/ l$ R" ^2 }1 M# {

' e) g+ e. C  b) |" x& A, y# I) c% P6 X6 Q
2.这是request的程序
6 |% b; z4 Y- F5 }9 @& ~) L. k//  Request a value from Extend) d1 {' R/ Q0 h- k6 {
//
8 E5 r# e1 [9 U# H8 v: V# G, j' u//        Initialize the variant that will hold the BSTR.  Set the variant's* ~, c$ G# n+ {/ S# [9 ?7 s# W
//        type flag to indicate the fact that this variant holds a BSTR. Place the
& s: j, o; X2 j( w5 D; g//        BSTR into the variant structure.
$ u0 W2 B, F$ P& D/ c- K7 G) `% N' X2 a4 b$ V/ F9 q. x
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);% S: T% R8 {5 \# j4 y
        ; o5 d! ?* A: Y; y
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
! b% u( B4 p1 p        VariantInit(&requestVariant[0]); - Y- v3 i! l3 G
        requestVariant[0].vt                 = VT_BSTR;+ q+ _/ g9 g: v
        requestVariant[0].bstrVal         = itemStr;. X+ q9 p, \' [2 B- o

: t% }. T/ i. m3 ~) P: d( q: m          topicStr                                         = SysAllocString((WCHAR *) L"system");0 D( I7 ^. I7 G
        VariantInit(&requestVariant[1]);
9 |/ R- u; B  C) }5 V! N( x        requestVariant[1].vt                 = VT_BSTR;6 g7 n) X+ z2 O# }
        requestVariant[1].bstrVal         = topicStr;
2 q' |7 b5 y( ~- K$ \
! Y: C& B3 X# @5 B' E//        Set the DISPPARAMS structure that holds the variant.
9 M  j5 C' y9 S5 z) U7 h7 b- d6 Q: e  d3 D5 {$ M/ q+ K
        dp2.rgvarg                                         = requestVariant;
# {5 X* f3 Q: b4 ~; F5 M( k        dp2.cArgs                                         = 2;
3 H, M+ ]; I/ c& Y; V( _% i1 n' L        dp2.rgdispidNamedArgs                 = NULL;
. I. Q& [; ~7 ~! B$ Q9 e        dp2.cNamedArgs                                 = 0;
' O( H9 g. j* ^+ S
! \& `2 w  V6 y  b6 _% O- j4 p         var.vt = VT_EMPTY;
3 K% `$ U* G  Q; Q9 w. r( W7 n  A( V' o+ _
//        Call IDispatch::Invoke()& T6 L- `. V; k- y, e& ^
0 L% g" ^4 y, X. ^6 t
        hr = m_pDisp->Invoke(
/ |! G2 P! e0 C0 M                requestID,
$ ~$ `  o' Q: y6 f  T3 Z/ {$ |                IID_NULL,. ~# }# S8 p+ H; b2 ?
                LOCALE_SYSTEM_DEFAULT,
: K! R& \2 @; K                DISPATCH_METHOD,: g: j9 J% s5 u7 D
                &dp2,
8 j, l2 f; X" z) I                &var,' }5 Q% O& V' ~% W+ R- u% [
                &ei,' ?9 \. |4 S3 p9 U; G0 _
                &uiErr);/ A) c: c+ _8 A7 \9 O

4 g- S9 A; v* b) T+ h4 T( f- d        SysFreeString(topicStr);) G3 u% s2 s, U5 r' \
        SysFreeString(itemStr);
  [- `. z+ Y! M请问该程序是获得extend里面的哪个值?# V) `/ j! k, E4 L- Y
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-8-11 20:51 , Processed in 0.012766 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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