设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12561|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
+ A( P" k0 }; X3 F2 J8 {( SName = (WCHAR *) L"Poke";4 a7 a8 l2 U, s- A
                   Y, q. g7 `4 |( X& G
        hr = m_pDisp->GetIDsOfNames (
9 `! D0 T7 A* m( `0 G( `/ D                IID_NULL,                                // reserved4 f) d/ z  l7 N
                &Name,                                        // Array of names to get IDs for! E) [: e$ k6 C1 E! A
                1,                                        // # of names in the array" F- K  O' i  y% S3 N0 B
                LOCALE_SYSTEM_DEFAULT,        // System locale" I0 P5 Y3 T4 \. O! ~* z* n2 J
                &pokeID);                                // Array of IDs to fill on output
2 B' h( K( ^0 q7 o                          {2 H0 @9 G9 |, b
        if (hr)& M. N6 V0 u7 k0 A, M$ D
                {
! a4 C5 \4 w$ B2 T. p                MessageBox ("Get Poke Unsuccessful");
; }4 _7 G/ [3 S! R4 B1 ~* u+ c                return;
" m$ N+ o& W/ @3 M& x/ _' A                }
& [7 }$ O" e7 ?4 X0 I. w1 Q+ @1 k% H6 _2 `* ~# \
/**************************传递数据给extend**************************************/! P$ j! O" I) y+ d8 u/ C
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);7 s! H" D" u/ T( s
       
% @5 j: i! d7 A* s0 ]) J         valueStr                                 = SysAllocString((WCHAR *) L"1232");
7 S) o1 Y- F4 c( d        VariantInit(&pokeVariant[0]);
$ i* [& N, u1 P, @# A        pokeVariant[0].vt                 = VT_BSTR;
. M7 k0 l- c# d  v/ z4 z- t        pokeVariant[0].bstrVal         = valueStr;' @. n( _6 V& a

1 b) z2 E4 w: h& s9 k! b         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");2 {- _6 \& d" x2 p' B
        VariantInit(&pokeVariant[1]); * J' W( O/ P' W. Y4 W
        pokeVariant[1].vt                 = VT_BSTR;9 h2 q$ w; C2 P
        pokeVariant[1].bstrVal         = itemStr;
/ k! ], v& y8 U* T9 T2 b& L
7 X- W4 d3 v" |) r# m          topicStr                                 = SysAllocString((WCHAR *) L"system");0 ]3 K' Q2 g8 S
        VariantInit(&pokeVariant[2]); 7 L7 B- P/ z0 b
        pokeVariant[2].vt                 = VT_BSTR;( ^8 q- M+ W# m( `; L% {
        pokeVariant[2].bstrVal         = topicStr;
, r, [& R" C0 t, Q4 a% V) r! `( E% J& q0 U- D2 {: f
//        Set the DISPPARAMS structure that holds the variant.( Y1 a: J, d; c0 Y3 Y* ]+ c

2 r9 U7 G9 h4 l$ H' P! c        dp.rgvarg                                         = pokeVariant;
# Q0 E% V# N7 w. F$ N8 c        dp.cArgs                                         = 3;* \; B- e. v) p/ x" n$ T3 q8 M
        dp.rgdispidNamedArgs                 = NULL;
: W  t1 c4 Z  C! G        dp.cNamedArgs                                 = 0;1 X/ `3 t8 _. t7 D5 ^2 V

2 T( g7 R% A1 E! P* c: n2 O# p//        Call IDispatch::Invoke()
  R% a$ C- n, v) y7 h: W. `- B; q  ]  J' z- F6 g
        hr = m_pDisp->Invoke(7 {/ n/ F! E0 w3 E
                pokeID,6 z; ?  O2 t7 H  E; h
                IID_NULL,: J2 Z6 u& h! N1 |3 r- p% S
                LOCALE_SYSTEM_DEFAULT,6 p- A8 c0 q6 e. s9 X
                DISPATCH_METHOD,
3 M4 u! r2 ]) A& C: C. R9 x' d4 d                &dp,
1 k6 j: N. H& K8 V; }% C, [                NULL,9 t& m9 |. R  N9 ]' p& i  r: [, Q
                &ei," f* X; p5 t5 \/ D' \4 {
                &uiErr);
0 q2 G8 d' f. I, N0 {1 O7 g* ~. B' z' C
        SysFreeString(topicStr);5 z, x' u, ?) d# `8 d; {. m9 C
        SysFreeString(itemStr);
" c; T" F6 h8 ^( F        SysFreeString(valueStr);
& `/ j1 k* ^% O, x, |2 |1 s9 N& ^$ n% g% E+ @
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???5 x) g, d! b9 w3 ~
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
9 a) U% P0 J5 g. G" R, j2 C7 Z/ }% k% W% G% n5 X, G

. C; ?& m$ h0 [- H8 X+ a5 u2.这是request的程序
: e7 ~: x: [# O( \# O( l5 P$ M+ W//  Request a value from Extend0 Y1 ]9 K0 C7 ~2 X
//: R( g5 i  p: S7 b1 Y
//        Initialize the variant that will hold the BSTR.  Set the variant's9 }2 r6 E- r( w# G( _
//        type flag to indicate the fact that this variant holds a BSTR. Place the
* O/ Q4 l7 x* Y: u5 q//        BSTR into the variant structure.3 `2 X/ V( [, _0 ~

/ _, Y* b: D( i- D        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
9 j; S  i- o4 V/ z       
; K6 ]$ f4 Q* T+ b# R         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
- W6 F- @% F4 l# k) Q  w+ m7 h        VariantInit(&requestVariant[0]); : t8 B/ \) d' D0 \
        requestVariant[0].vt                 = VT_BSTR;& j( @4 M1 v; ]! \. r
        requestVariant[0].bstrVal         = itemStr;' {3 `3 k+ D. F4 p

1 o; f9 |' u4 |& h% S, ?: k          topicStr                                         = SysAllocString((WCHAR *) L"system");
+ [, a8 m- u0 `0 [        VariantInit(&requestVariant[1]); 3 ]2 g% V5 ~1 ~& T3 J
        requestVariant[1].vt                 = VT_BSTR;
: ]7 F& ?1 H& j        requestVariant[1].bstrVal         = topicStr;8 Z/ ?% n) ?9 Y) ~7 x& a
! ]2 @8 O* L6 d# C) \' V( o
//        Set the DISPPARAMS structure that holds the variant.; C. F. h0 }! B& x4 A! a
# i4 K( D+ X5 Z1 W- v# W$ j9 u
        dp2.rgvarg                                         = requestVariant;
2 g: ~2 {) y0 S7 L! C8 E: P( i        dp2.cArgs                                         = 2;' h& A2 [" I# t# }& \' Y
        dp2.rgdispidNamedArgs                 = NULL;
9 d9 J$ V. t9 T5 M, S        dp2.cNamedArgs                                 = 0;$ S2 |, e5 L& R8 D

) w6 H& H& Z' ?( G- Y8 p         var.vt = VT_EMPTY;/ p8 |( J8 o6 _# x/ d( K

8 q+ g* E- E( L/ Z//        Call IDispatch::Invoke()- }  d, T/ r2 N7 `  v

$ t+ B# F: ^/ S3 X        hr = m_pDisp->Invoke(# u& C8 Y" }0 h9 g: g5 C2 d, Q
                requestID,
! B3 H# I$ n% a+ S' s/ H                IID_NULL,
8 \4 ?  z$ ~' U: q                LOCALE_SYSTEM_DEFAULT,
0 e# h6 x9 L) G: y1 }/ M' A                DISPATCH_METHOD,
' s; K# w* J8 }" o, {6 n9 q) R                &dp2,7 a" y& z8 D$ `
                &var,
- H# C5 _! c% A" G# }, D0 B                &ei,9 E- M& P; V' u. ?
                &uiErr);4 c3 H8 T: |  G% q2 N3 @

9 s$ p  Y+ I& z2 I        SysFreeString(topicStr);  l+ p, M% T* v$ u) V; [) I
        SysFreeString(itemStr);4 L! X0 ~; r# @* L
请问该程序是获得extend里面的哪个值?
1 \$ o5 ^# g$ H- p如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-8-19 09:06 , Processed in 0.017871 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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