设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10380|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:5 {, {$ K* h. O
Name = (WCHAR *) L"Poke";( R" Z* o$ `  b* T0 f
                 9 [( d8 h+ Z) u6 l6 E
        hr = m_pDisp->GetIDsOfNames (
/ s1 J7 H. D& W: q                IID_NULL,                                // reserved
/ x' o5 H) l+ Q                &Name,                                        // Array of names to get IDs for
' y  f3 U! o2 T2 I9 ~" }7 k                1,                                        // # of names in the array$ C! Z; e8 ?6 k& v4 r# n
                LOCALE_SYSTEM_DEFAULT,        // System locale2 W2 v+ X4 f5 r$ r1 C1 S- o5 M7 j
                &pokeID);                                // Array of IDs to fill on output
( X, z& c$ U; U5 l  i! y                        ' {* i5 ~# h) b9 m7 `
        if (hr)9 i% [6 {. j8 y4 r& V
                {
" h  Q. S4 J4 S                MessageBox ("Get Poke Unsuccessful");' v& b* c4 Z! [: j
                return;  I/ S+ N$ j$ a1 {9 C
                }- U2 q% ?* h+ E3 @; `
0 w/ g: a4 _; {
/**************************传递数据给extend**************************************/4 U" C+ _( y/ k; j
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
. I6 R/ t& f1 F8 d" O       
2 g6 R/ Q9 l4 m( A0 d" h         valueStr                                 = SysAllocString((WCHAR *) L"1232");* ~' M3 K0 V$ m$ Y) L9 S
        VariantInit(&pokeVariant[0]);
/ H: C% N! c  G6 F& P" L1 o1 i        pokeVariant[0].vt                 = VT_BSTR;
1 {7 T4 f+ \! i9 N9 _& u        pokeVariant[0].bstrVal         = valueStr;7 e5 w7 l/ c0 ]$ m5 N: k3 r
% X" J$ I+ o0 C' u2 L0 j( f+ X5 E
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");. g# R" i6 p/ _7 z9 H
        VariantInit(&pokeVariant[1]); + {7 t7 C/ X. A( V8 u. y. G
        pokeVariant[1].vt                 = VT_BSTR;
8 A) M6 _$ k% e( p        pokeVariant[1].bstrVal         = itemStr;
; h; Q4 }9 `, Y* |2 }6 z& Y) J% Y- a. T
          topicStr                                 = SysAllocString((WCHAR *) L"system");6 A, x+ Q' J, s
        VariantInit(&pokeVariant[2]);
, p- m& E% j+ K        pokeVariant[2].vt                 = VT_BSTR;
% H0 Y$ P, a" F7 J5 G        pokeVariant[2].bstrVal         = topicStr;
- z" _- o# ^( \/ `1 p: @4 d
; T% N2 H. J' v8 y4 T3 U//        Set the DISPPARAMS structure that holds the variant.& b6 r5 E' S, `; x
! J# {" y; W1 [+ I, H# o
        dp.rgvarg                                         = pokeVariant;# i; R9 Q  F, |1 e2 w: y( g/ a
        dp.cArgs                                         = 3;
; i. ]& Q' ]( U3 T) i2 i5 a        dp.rgdispidNamedArgs                 = NULL;
  R' t& D! m8 X; v        dp.cNamedArgs                                 = 0;7 \( b5 {' A9 f6 l4 Y3 J" J

6 O% [: u) k# [* a) K' x* v0 j0 F//        Call IDispatch::Invoke()% F& j: ~: v% v( z( D
3 o: a* H: Z3 V1 n
        hr = m_pDisp->Invoke(
$ J4 J+ [! t( y                pokeID,
3 k7 h  J! N! u' ~. N9 Z- J                IID_NULL,
! R  w2 D$ w7 z                LOCALE_SYSTEM_DEFAULT,
; ?" o3 K0 \& k8 Z7 i) F: h( Q                DISPATCH_METHOD,
* Z' ]0 Q) p; O; |' N                &dp,
2 _% k: H" h2 [/ K2 [5 k3 |& j% N                NULL,: c2 w0 i' L! @1 M! h3 Z" N+ p8 h, e
                &ei,
; |1 w4 o# ^" s% x* }                &uiErr);
$ m( M9 \4 R0 F* _
# }! Z2 k( ^; r5 h- _' o( U        SysFreeString(topicStr);
9 Z- _5 Y. C5 G5 u/ {: b" q3 X% ]        SysFreeString(itemStr);9 C# {9 B/ J+ p0 i: ^- E- \
        SysFreeString(valueStr);
# `# f; d6 J0 \) {7 P+ w  _4 w: P6 X/ i; t" p
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
$ ?& I% q+ E6 w( q, X: w此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
* l8 w5 l; y; q5 W
- i2 o7 \2 T( H, ~$ P& v, g5 J( u: _+ z! ]6 i/ s. C7 N
2.这是request的程序
* W9 O  @& G; [//  Request a value from Extend
, @- ?8 l' b' ]* Y# ?! Q' o& s//& H9 I/ W" d: }1 _% d5 x; v# Z0 r
//        Initialize the variant that will hold the BSTR.  Set the variant's
: o: S: |- g) w' A: I5 ]& B//        type flag to indicate the fact that this variant holds a BSTR. Place the( m# ?5 F3 \* x6 {+ a
//        BSTR into the variant structure.
6 U- F- T+ z+ r/ v
# F  ]* }& L) C        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);( x& d, ~3 \, C. R. ], J
       
& M. I/ ?' g& M+ A& a         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");& D2 z! I9 q% j  m, w& U: P
        VariantInit(&requestVariant[0]);
: Q# n# v/ k8 u9 c! q, w: @        requestVariant[0].vt                 = VT_BSTR;
) G7 U" x6 s9 ]. w4 U9 \+ u        requestVariant[0].bstrVal         = itemStr;: s7 p) }) b' x

# ^3 T' v% @5 g          topicStr                                         = SysAllocString((WCHAR *) L"system");6 k3 J* j8 ]+ u) M5 h
        VariantInit(&requestVariant[1]);
' d/ y5 R6 i3 w        requestVariant[1].vt                 = VT_BSTR;) J; \& {3 Y- N% }6 D" R$ s& r4 X
        requestVariant[1].bstrVal         = topicStr;6 }7 i3 k/ `# {7 E0 |
2 |" K5 f: n! j1 {" o/ O/ J% U9 j$ ?
//        Set the DISPPARAMS structure that holds the variant.. f+ @+ K/ u+ ?9 x4 j, `
% A4 p* k) y) T! Q
        dp2.rgvarg                                         = requestVariant;  u2 u+ I+ o- i3 j" L$ ~- n, F( J
        dp2.cArgs                                         = 2;- Z0 G1 ]% ~# e' X9 J
        dp2.rgdispidNamedArgs                 = NULL;
1 m$ h* s; c" V& J3 ^        dp2.cNamedArgs                                 = 0;: z8 v3 F. y9 X1 P) i
1 f* R( L" t5 z0 ]
        var.vt = VT_EMPTY;
, S4 v/ f) f, j2 S
7 ?+ V/ |, k2 M6 R( a  ^//        Call IDispatch::Invoke()
0 E1 O  l7 G1 W  M, N3 w/ S& k$ s# V
        hr = m_pDisp->Invoke(" B+ W0 U) G$ @* T  ~: J8 O  a
                requestID,8 a/ `) ?8 o7 e1 {% x) T
                IID_NULL,
: j% q/ q/ H6 \                LOCALE_SYSTEM_DEFAULT,
, t( ~; l* E7 A! B                DISPATCH_METHOD,
: {0 E* }- X% s$ e6 b: p                &dp2," T+ w: X& g9 X$ P6 _
                &var,! {+ b& R: j. h! J- j% k' `
                &ei,
* \8 P  A: i" f- Z$ a- w! D% B                &uiErr);
* [3 e, P* `1 {
" C8 i$ }! d% A0 c7 X+ U        SysFreeString(topicStr);( g$ l" |9 Q% N: U: h7 E2 z# k
        SysFreeString(itemStr);
& I7 \" q  t- H' n7 k请问该程序是获得extend里面的哪个值?# D- g+ b/ i( d! i' {+ @
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-23 00:46 , Processed in 0.024011 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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