设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8055|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:7 b& X0 P7 V' G- g8 u
Name = (WCHAR *) L"Poke";/ r- s  Q2 O, u; O* @' T" D7 }
                 - Q( x0 ?! G, Q9 P
        hr = m_pDisp->GetIDsOfNames (; p4 z: h" j. [+ }
                IID_NULL,                                // reserved* M- M) Q5 v( M" n; g$ K
                &Name,                                        // Array of names to get IDs for7 U7 H; O, U. ^# Q. {4 i
                1,                                        // # of names in the array4 K, m* f/ {5 u# q$ E& x
                LOCALE_SYSTEM_DEFAULT,        // System locale
9 _) \2 C1 y7 s: k. r                &pokeID);                                // Array of IDs to fill on output/ O% b) a* J( ~
                       
. R+ h, ^' @" B) L/ I        if (hr)
" Z8 ^+ u' v2 T                {
9 O1 H& X) Q8 ^. t6 }, q- b+ M  d9 W                MessageBox ("Get Poke Unsuccessful");1 y+ Y( l3 D, }2 @4 z! ^
                return;5 @/ Z( p' W  v$ ?& c/ r+ p6 z
                }$ i7 e* Y; P7 t7 @8 R9 d

7 u& S- a9 ~9 i; \/**************************传递数据给extend**************************************/
# V, Y9 R0 M% Y  o4 R, e        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);& C1 H* `& X1 x( ^; P
       
- k( W$ }! K+ N' B! H         valueStr                                 = SysAllocString((WCHAR *) L"1232");; ?1 L7 C& W; T9 {4 t' |
        VariantInit(&pokeVariant[0]); ' U( ^. N/ ?0 o% ]* a3 k2 s& F
        pokeVariant[0].vt                 = VT_BSTR;
3 ~0 U6 O$ k; l2 l# G; T        pokeVariant[0].bstrVal         = valueStr;1 O, e8 j0 Q# d3 t- x

4 Y0 q7 D9 B( _( g/ X% v( F% p3 R         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
! C$ K' M2 d" X. j8 h9 p4 G        VariantInit(&pokeVariant[1]); 3 f/ i) `6 G0 m4 B
        pokeVariant[1].vt                 = VT_BSTR;
* c! m5 G# b% ~7 X- {        pokeVariant[1].bstrVal         = itemStr;
& i& t# Q/ {# y: h  ]+ D2 `* _, t) \
          topicStr                                 = SysAllocString((WCHAR *) L"system");
. `4 e# I$ o; \, Y9 D8 U        VariantInit(&pokeVariant[2]); / R. i& G& d; P7 O/ D2 j
        pokeVariant[2].vt                 = VT_BSTR;
% t0 _, S, v9 ~+ Q0 @  ^: Q        pokeVariant[2].bstrVal         = topicStr;
% Q; c( S: P6 R* _6 _8 g- [: h: [' [, ^! `3 E0 \
//        Set the DISPPARAMS structure that holds the variant.
9 r% K6 S! r! F" y% g6 ?) g
" w" x% {( _# R9 v        dp.rgvarg                                         = pokeVariant;
# f/ k' n9 W/ V8 Y9 d2 B, J8 Q. M        dp.cArgs                                         = 3;
7 f: y5 D# m  F& Y' r        dp.rgdispidNamedArgs                 = NULL;1 B, d; w9 M8 h8 k) b
        dp.cNamedArgs                                 = 0;
$ }! T' x6 y% w1 W5 p# l( ]: t* O
7 z9 s+ m% k7 y+ }, m: P//        Call IDispatch::Invoke()
* p+ [: T5 ^5 J- w$ x& |* X, u, R6 `0 y+ \
        hr = m_pDisp->Invoke(
9 V+ R. ]% T4 W. c# \                pokeID,
+ A! ~3 q& `: ]" ~& J% n9 n4 j                IID_NULL,
2 s0 c+ Y/ J' A' B4 X+ \                LOCALE_SYSTEM_DEFAULT,4 {- v4 T4 U' t; t
                DISPATCH_METHOD,% N4 t1 J) u' e
                &dp,% [$ Q( U" q/ m8 J, G4 V
                NULL,
+ J$ k1 Q& j' j- T  i& x4 _                &ei,
4 G& g  l6 U0 _* Y                &uiErr);
, o1 R* j3 j7 q; t/ o; s( |) T3 e4 o( |" u0 H: t- K
        SysFreeString(topicStr);
! @, b7 m) [9 K! Z- {+ W( a: Q        SysFreeString(itemStr);- ]$ T( Q$ @, w5 W) R9 J7 Y
        SysFreeString(valueStr);
9 D* D0 g6 b: q2 w# n" a" p4 @
, @7 U, ]% y  j2 S, z( C' i- o现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
/ f0 q8 p* }/ p/ K" M0 i& b0 ^此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
3 @  ~" [1 o8 N, \& T
. S7 T2 b& c& C& C
( g8 @8 d$ Y# E6 b7 E2.这是request的程序
& `$ \( ]2 _6 U* w. J//  Request a value from Extend1 N/ `& X4 n4 G5 C" P& Z* |
//
0 e: @. J) Z; ]& X3 U7 Y2 l//        Initialize the variant that will hold the BSTR.  Set the variant's
0 v4 o+ Q! ?& i: r2 C( I0 X9 P//        type flag to indicate the fact that this variant holds a BSTR. Place the$ r( f- I, n8 ]5 J- ]
//        BSTR into the variant structure.7 @6 C: p1 s$ D5 ]
; m3 u' W- e9 j5 }4 D  U9 ~
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
. X- ^. s9 ?) p' |2 v7 B2 ?, K0 T        4 s* p7 i" e# i4 D
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");5 \+ b5 N3 f& @' \" Q* @
        VariantInit(&requestVariant[0]);
, w# S% T# p* b* D) N- v        requestVariant[0].vt                 = VT_BSTR;
9 U$ u1 ?) l# t        requestVariant[0].bstrVal         = itemStr;% |5 g. M5 `$ ~9 I3 C
. E# R/ U" l7 A% s& y  A" ], H
          topicStr                                         = SysAllocString((WCHAR *) L"system");2 `  h. Q: n" d: k& u* {+ E; N
        VariantInit(&requestVariant[1]);
! ]# l8 j$ h; `- A0 `        requestVariant[1].vt                 = VT_BSTR;
/ B& w/ T' w2 b0 f8 M  G; w        requestVariant[1].bstrVal         = topicStr;
9 _& A$ t4 `" X" Y* M: p$ ~" o% D5 [. D: [! n
//        Set the DISPPARAMS structure that holds the variant.+ w) L# {! L3 C8 M+ P% N' K, A

' K$ x' ~4 x- d        dp2.rgvarg                                         = requestVariant;
5 `/ ]8 r- n* W! G        dp2.cArgs                                         = 2;
: G2 Y% l1 z4 q8 R* p) c' b/ j        dp2.rgdispidNamedArgs                 = NULL;' T  _8 U' \7 o5 T; I: O6 l# ]
        dp2.cNamedArgs                                 = 0;
) b7 t1 x8 L& {! r& o2 q5 _  h9 Q- y6 x0 f
        var.vt = VT_EMPTY;
" _8 ?1 o- J% s; o5 B7 x
" W! M- H9 {& E4 |! X, G* E//        Call IDispatch::Invoke()8 h1 L# e4 D& F' u) ]6 i4 p; V
: A+ q) X8 X* D+ n0 x5 ?
        hr = m_pDisp->Invoke(
. t  n; t, O- Q: y% I% k1 D                requestID,, W# M0 E5 A+ [; @8 @9 S9 c' v
                IID_NULL,
# \, O: p7 C4 a" d( m, Q# Z% y                LOCALE_SYSTEM_DEFAULT,4 M6 \' I& v, L  A- O9 _
                DISPATCH_METHOD," h4 H- O. D# O6 G/ C" E/ V' |
                &dp2,3 B; n3 w  w; W. K! e
                &var,
7 ]" c, e# w0 ]% k                &ei,
$ `" J, q( v; x% G  y& x  E1 {, [                &uiErr);( \# _. X' r2 q1 R2 s8 b

. _, @  g8 Q. z, I* c        SysFreeString(topicStr);) N% {8 Z9 p; y8 Q) U0 P, o
        SysFreeString(itemStr);
( w0 Q  r% {; G5 _$ ^请问该程序是获得extend里面的哪个值?! v$ b2 C$ [7 o, C
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-2-12 20:02 , Processed in 0.019596 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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