设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7592|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:) F& T/ ^& @% C! F
Name = (WCHAR *) L"Poke";2 Y8 u5 t; L, N: d
                
" l' v% T" f+ _8 Z        hr = m_pDisp->GetIDsOfNames (
  x" R2 P  k1 T# J                IID_NULL,                                // reserved. U' f( Y8 k1 _  l, j8 C+ V
                &Name,                                        // Array of names to get IDs for8 x0 M* q+ t* q5 ^
                1,                                        // # of names in the array
' Q2 V# q5 j8 K, s" y$ ^                LOCALE_SYSTEM_DEFAULT,        // System locale! P8 @7 k) J( G- a6 R1 p  S5 q
                &pokeID);                                // Array of IDs to fill on output
9 }3 i3 C  {9 z) R, z                        1 N" f  f( Y  l2 i
        if (hr)  f1 z" S% J" e1 Z. m% Z( m
                {
: P$ R4 o8 a% [$ E" Y: M6 R                MessageBox ("Get Poke Unsuccessful");
; K2 Y6 D$ A3 |9 d                return;
4 p# s5 T5 c4 A4 h! V3 J+ h                }$ U! l$ ^7 X8 t% C& }% R
4 [9 l) G0 C: e0 a. r  v
/**************************传递数据给extend**************************************/6 {9 Q& c8 f& u2 s
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);+ J3 ?0 o6 f5 @- Z0 o
       
& ?4 h5 ?# d' ^) [4 {         valueStr                                 = SysAllocString((WCHAR *) L"1232");
. I$ R  _9 D( {3 z) E        VariantInit(&pokeVariant[0]); 0 P- q! K3 M$ C) S$ Z, i
        pokeVariant[0].vt                 = VT_BSTR;
7 {' w7 k) D5 p2 t        pokeVariant[0].bstrVal         = valueStr;
5 p! t7 y6 y; F
) h& p1 W3 L+ [2 ?         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
. K( G& d( e: U# q6 o4 h; |        VariantInit(&pokeVariant[1]);
$ E0 p) ~5 ?6 j& w        pokeVariant[1].vt                 = VT_BSTR;
% V% d8 M! L1 F3 }        pokeVariant[1].bstrVal         = itemStr;
1 n- F: \$ i' j: g2 d
* ]0 q) I& E& s% F          topicStr                                 = SysAllocString((WCHAR *) L"system");
7 t" r5 @8 F1 j7 n, X  I% D        VariantInit(&pokeVariant[2]);
% Z8 K/ `' \: X0 j1 i- c        pokeVariant[2].vt                 = VT_BSTR;6 a" l! L7 Q9 m$ Q  U
        pokeVariant[2].bstrVal         = topicStr;$ u6 p+ d, L! ]& t5 c

( ?" K  D, }& n4 z, h9 E//        Set the DISPPARAMS structure that holds the variant.4 t+ e$ R9 R) ]! h8 `- x6 y

- i5 t& J" h) W! x        dp.rgvarg                                         = pokeVariant;
7 K* L; j: y+ i. a* a" I        dp.cArgs                                         = 3;
! z8 y% k3 i( J8 @: j        dp.rgdispidNamedArgs                 = NULL;" {% l3 ~$ |" D0 i
        dp.cNamedArgs                                 = 0;
+ r* k: P/ H& U! Q6 ~5 h  g3 z
+ r& I  ^+ v2 e4 K, [9 \5 L//        Call IDispatch::Invoke()
. Z4 [) k6 _( U  I, u! A5 g& x. r* N# m
        hr = m_pDisp->Invoke(
9 H, I" q7 G8 h8 m; ~9 _                pokeID,
8 s( g6 t2 e" |5 v: x$ `                IID_NULL,
; g' O4 {2 R3 R' t+ O  d) H% O                LOCALE_SYSTEM_DEFAULT,2 L# G2 n1 E7 x0 s/ D" o4 C. a" f
                DISPATCH_METHOD,0 C. o2 F; n; b4 U$ }
                &dp,7 z; k2 x  d# ^
                NULL,
$ g' }0 A9 n* R% k; L                &ei,
! l1 r1 b- t8 r                &uiErr);
' Z1 {# g, k6 l4 ]6 T/ A$ k
; X, u3 ]5 g, x/ ~- v4 _7 Q0 @! ?* p        SysFreeString(topicStr);! T# D4 A7 N; M9 ^8 k9 L2 X
        SysFreeString(itemStr);
; C0 {# D, z  u- N  {5 V8 c! M        SysFreeString(valueStr);
, g0 H9 l- Q6 r$ P" v6 P1 V' O6 @$ `8 ?% C
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
# c* D( I6 |( r0 W. d, ]$ ?此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
  m+ R8 {  Q9 N. R% W) @, P/ Z$ V0 X& x
/ A  g( S! m9 P1 E. b
2.这是request的程序
" c: o# a+ y% i//  Request a value from Extend
: m( a8 u" B! Q! u//
, E. u  y% r# u% j( `7 d//        Initialize the variant that will hold the BSTR.  Set the variant's
4 A" W- t# C; g# n% @; H2 R; r//        type flag to indicate the fact that this variant holds a BSTR. Place the2 t8 I% `# t; ]' d4 L
//        BSTR into the variant structure." X( D; T' {1 W3 g9 S7 `

2 O1 V- Z! P6 ^        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
  U- A+ y5 j( j0 F9 |6 S+ b3 ~        ' y; l6 {* S2 F2 G* X2 ^1 @* H# ~. c
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
# W0 j4 @3 E* ?( o- q) {; I- f1 w& M        VariantInit(&requestVariant[0]);
# Q7 M' |( `- u, i        requestVariant[0].vt                 = VT_BSTR;
8 B; J* [% [& E% z        requestVariant[0].bstrVal         = itemStr;
7 ]/ M  F) i7 r- G) B& i$ V2 W, a
6 q# N6 Z' z0 y: ^. W4 k8 S9 ^          topicStr                                         = SysAllocString((WCHAR *) L"system");
, W# I& Q! N6 t3 K$ j0 _        VariantInit(&requestVariant[1]);
5 N& E7 A3 W' r  `# [, O        requestVariant[1].vt                 = VT_BSTR;( R& i$ E- f0 ]6 i# e5 o
        requestVariant[1].bstrVal         = topicStr;
* [% {9 ~4 M' E8 V1 X3 u  ^( b* h- A! c" \6 j. ?* e
//        Set the DISPPARAMS structure that holds the variant.. t* W- N9 K! I+ v( ~& e$ r
) e9 O! W, {3 ~+ s  @; V! k! Q
        dp2.rgvarg                                         = requestVariant;' O3 L! ?) b9 u1 U5 J, J
        dp2.cArgs                                         = 2;
& O' A2 i  `* M        dp2.rgdispidNamedArgs                 = NULL;* t* A  q3 I+ G2 v9 h
        dp2.cNamedArgs                                 = 0;- P$ Y/ C7 s2 H7 c: `2 R

$ R' _! }6 i9 F; O3 R         var.vt = VT_EMPTY;
8 Z$ B% }2 k% Z- S: e" @
: h& W7 ~& j0 V+ n" s( a* Z//        Call IDispatch::Invoke()3 O  {( `5 @  c/ y3 G4 s' H0 d
$ b- t: |, q+ {5 e
        hr = m_pDisp->Invoke(
7 M% Q3 R* \# b# p) W                requestID,
2 S/ q$ |8 x7 z, B                IID_NULL,% R" n9 g- ~2 S5 P: ^1 I# {
                LOCALE_SYSTEM_DEFAULT,0 N; \* A5 b/ K
                DISPATCH_METHOD,
9 E( Q9 l% f* u3 H$ R                &dp2,
  H* a2 }) u1 {$ S/ w  _                &var,, ~: q2 o$ g1 w) R+ t( F  F, m7 t5 a
                &ei,' N3 S' J8 s' @4 h, e3 R+ \1 Q
                &uiErr);
7 @+ r4 Y( l3 g3 [) q- C( X  y' c- \* a9 g% K# \& r
        SysFreeString(topicStr);
* q- G+ h  b' Q* U        SysFreeString(itemStr);
+ b) e& `$ p9 d! S请问该程序是获得extend里面的哪个值?: B  h3 _3 O  n; G% i  R- S
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-1-26 04:04 , Processed in 0.015166 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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