设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6678|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
8 X3 M# w1 I  G* F. yName = (WCHAR *) L"Poke";
$ `! V! w1 h" g: d* e9 z' X                
# L/ n; Z+ B4 f7 i        hr = m_pDisp->GetIDsOfNames (+ e  \$ I& I, @# M! E2 M
                IID_NULL,                                // reserved
5 r9 S% e+ h5 B  d                &Name,                                        // Array of names to get IDs for' p! T8 }' v6 C0 ?  E
                1,                                        // # of names in the array
; t' l  h+ {+ ^! W: e% I' {0 J                LOCALE_SYSTEM_DEFAULT,        // System locale1 H# T7 z( T! g9 d, T  s; W1 `$ d: w
                &pokeID);                                // Array of IDs to fill on output% Q: {; r1 G' x' Y
                        2 x+ N3 }4 U/ n. _
        if (hr)
- ?% ^* d! M5 y9 K1 Y$ o/ L                {/ q0 t& g) x" I1 c9 b0 r$ _
                MessageBox ("Get Poke Unsuccessful");
, m1 S* O- n6 B& I' p+ l' z9 y                return;4 r) w- n* q/ k
                }
* e( k- l; e, z( F, o9 Z& q+ T, e# R$ W( N3 x8 c
/**************************传递数据给extend**************************************/6 b7 H- m) }3 M+ Y
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);2 F: h& l. X4 m6 Q  p# a, g. E
       
! a4 N. Z, ~0 b5 l" r8 D         valueStr                                 = SysAllocString((WCHAR *) L"1232");4 \5 T/ H4 u, E
        VariantInit(&pokeVariant[0]);
# T1 k- z  U1 g1 T( z. F0 W        pokeVariant[0].vt                 = VT_BSTR;: S2 \( ?% o8 t$ l& S) ~
        pokeVariant[0].bstrVal         = valueStr;
; j2 u  v; N& j* C& E" F. H- b
5 P( S% F  Q5 E3 z: B  C) B3 q) f1 m" ?         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
0 y! x; v1 ^% H+ Z, R        VariantInit(&pokeVariant[1]);
& r; R0 E6 H- t9 j. F* \! Z        pokeVariant[1].vt                 = VT_BSTR;: v/ o8 {. r! f% m/ |9 Y2 U
        pokeVariant[1].bstrVal         = itemStr;* v  S: u/ J7 ~' X: i/ c+ j4 \
$ Q  ]( {, j7 u* C7 F. q  V4 j; e
          topicStr                                 = SysAllocString((WCHAR *) L"system");
2 J* X1 t; B) y0 q1 S! z4 S0 c$ j  V        VariantInit(&pokeVariant[2]);
4 `& u4 m$ ~0 f, ]4 b7 v        pokeVariant[2].vt                 = VT_BSTR;) K5 x6 J- d  h
        pokeVariant[2].bstrVal         = topicStr;
  [  ?+ F4 ~8 m* t( \
9 @9 |2 o, _" p/ P3 n//        Set the DISPPARAMS structure that holds the variant.% s# q* t$ I6 k8 D9 u2 @
- u; p7 t1 ], B
        dp.rgvarg                                         = pokeVariant;& x. [4 G* k; F; f8 v& W5 x6 n
        dp.cArgs                                         = 3;# a: \! m7 i( |) I3 |* \$ W
        dp.rgdispidNamedArgs                 = NULL;0 f$ E0 _  Q' _; ?7 `
        dp.cNamedArgs                                 = 0;. F& I/ x" v! B) s- D! c5 e5 u4 q

% H- b- f4 a  E0 [1 }* T//        Call IDispatch::Invoke()
* R4 q7 v& @3 ^5 V' }& Y
% U- Y' {. T8 L1 p        hr = m_pDisp->Invoke(" ^: R, ^; I+ A
                pokeID,
. C) M, W7 `% ]5 j! B, F                IID_NULL,$ W+ F* z3 b% x: S: [
                LOCALE_SYSTEM_DEFAULT,
0 U/ k. {2 C! P                DISPATCH_METHOD,1 ^; b8 V1 r$ E  R& l
                &dp,
  _' w, Z: g/ K6 z( o                NULL,
+ U  c# G+ ?0 @" `# V                &ei,
5 H8 q, D4 d6 P                &uiErr);
0 |6 u# Q- X! m) c1 z* i8 N1 R& W: R1 v, ^; K! V( {
        SysFreeString(topicStr);4 O, H' l1 C' i2 D$ h* s
        SysFreeString(itemStr);
; J& U) h: p& b, C        SysFreeString(valueStr);
* y/ L0 T' v8 X' M( f! B. B8 J/ l- ^- V
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
; W! W2 w& `5 {8 j此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????2 i* C/ j; R, u4 G  O0 q5 p
4 z& ]3 k: V1 Z1 ]- g7 [

, v' W1 @: \; @# o/ H1 i6 B2.这是request的程序
4 x2 G" ]) O) ]( `/ F//  Request a value from Extend
" p" N9 i5 ~$ R//. ]) z! w! t. [# A  D, C" O
//        Initialize the variant that will hold the BSTR.  Set the variant's. K) W5 S  X/ Z9 N
//        type flag to indicate the fact that this variant holds a BSTR. Place the) d9 F) D$ J/ Q( q/ t
//        BSTR into the variant structure.
; ]" N0 r! I0 v5 j7 K0 k4 N0 u% [/ X$ ?! L9 |2 X/ M) {
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);2 ?8 D- o6 j/ e( u" D
        ( z4 l9 X& w& @+ D
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");+ F& G; g4 O8 n& Y- h! F
        VariantInit(&requestVariant[0]);
# K  U3 T. }: _) d7 g& ~        requestVariant[0].vt                 = VT_BSTR;
9 z# E- w+ k3 L# r: `        requestVariant[0].bstrVal         = itemStr;% G' K0 }/ \; E1 l) u% R- j
* K( u  t" r8 D+ K. B2 {1 r" V0 t
          topicStr                                         = SysAllocString((WCHAR *) L"system");- I4 l$ w% q2 K+ E2 y) q
        VariantInit(&requestVariant[1]);
/ A& c& f& a! U3 T% t6 r- Y        requestVariant[1].vt                 = VT_BSTR;  }5 G2 a; J) c7 S' |' l
        requestVariant[1].bstrVal         = topicStr;
) Z1 D) [4 A% _7 l( i9 {8 r% U7 d& b5 c1 f; j
//        Set the DISPPARAMS structure that holds the variant.$ m6 x- d: f- H4 D

7 B% w$ Q# f/ I, r" T        dp2.rgvarg                                         = requestVariant;
! l7 d* f0 W. _8 p6 j. [        dp2.cArgs                                         = 2;
* t! Z1 j4 e. q$ A5 S) @        dp2.rgdispidNamedArgs                 = NULL;
% O3 B# t/ a% Y6 p- A% X+ T0 F- Y        dp2.cNamedArgs                                 = 0;, M0 w4 {) Q- b. M0 h3 H

* i' i$ j3 I7 L4 `8 ?/ A' U$ _         var.vt = VT_EMPTY;; E5 T9 T) A+ Z+ w8 S7 D3 Y0 o
  x- [+ N1 K5 S3 S2 d2 E" K
//        Call IDispatch::Invoke()1 H: t0 u4 S% q! D( V; h
% F+ [& c, ~; |+ g7 K
        hr = m_pDisp->Invoke(
. k6 u8 E, _" e4 L# t7 f  P                requestID,
# _$ N; i/ _: _/ e0 X                IID_NULL,1 ^+ W1 t; B* x* K' P
                LOCALE_SYSTEM_DEFAULT,9 F2 D' E* J- L4 l
                DISPATCH_METHOD,
. |8 ~" R+ g) P# p& w% n                &dp2,, o1 m* K4 e# B! D
                &var,% l/ g" g' `2 V7 O
                &ei,
2 {% E- H2 N2 v/ {$ ?) E                &uiErr);
) \' p' r6 q- d* }$ `' ~* O0 U8 h; O7 W
        SysFreeString(topicStr);+ T; e) v* Z& @1 M
        SysFreeString(itemStr);: R! S5 s) B) y, k
请问该程序是获得extend里面的哪个值?
9 N1 V7 h$ O9 e3 T7 l8 g3 L如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2025-11-24 10:06 , Processed in 0.016495 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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