设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7232|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
) S: Y5 ?6 v1 a7 XName = (WCHAR *) L"Poke";4 o* j2 j  x3 _1 w
                 2 U1 v; |7 |1 f; b
        hr = m_pDisp->GetIDsOfNames (: c$ [" B. f0 T
                IID_NULL,                                // reserved
, b. I3 ~% W5 x# f                &Name,                                        // Array of names to get IDs for
9 d5 r, B6 |. U) f0 v! `% i1 u) P                1,                                        // # of names in the array. `% f* @  R4 h5 H; x( Q
                LOCALE_SYSTEM_DEFAULT,        // System locale) w, j# Z: L; }' M+ K- V
                &pokeID);                                // Array of IDs to fill on output) o. W. p4 U' \6 }0 Y4 L
                       
# ~8 B! y; h  s        if (hr)  l- P6 l+ r5 y* w& H. W
                {8 a) C5 R! e& x; g+ ~
                MessageBox ("Get Poke Unsuccessful");- T5 O9 N' b+ \: z3 ?
                return;$ R! \3 ?) b$ q3 b  d) L7 Z- A
                }
/ L/ P: y! z( H
# J7 e% C' {! `, N# Y/**************************传递数据给extend**************************************/" s% T) Z- y3 N; @' v- n
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);0 c0 Q( y( p- m6 d$ d3 o0 f9 T
       
( N3 z# z7 @* u0 U         valueStr                                 = SysAllocString((WCHAR *) L"1232");
; l/ |4 m  N: o$ }  V# f# K        VariantInit(&pokeVariant[0]);
# M! d+ m! ]0 ^, ]        pokeVariant[0].vt                 = VT_BSTR;2 v( j5 D) D  T* j/ `
        pokeVariant[0].bstrVal         = valueStr;
& q. D. m2 X5 f/ Z
" `. c5 ]! \0 c( l1 J         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
0 l0 |" D. [7 Y; U8 s! f9 S/ H8 u        VariantInit(&pokeVariant[1]);
9 F# b+ }7 n; ^1 {1 Q4 _        pokeVariant[1].vt                 = VT_BSTR;) p0 ?7 }. j+ F1 x8 p
        pokeVariant[1].bstrVal         = itemStr;
0 k* c8 N1 n$ h5 d' C
- Y) ?% x. m" F+ W5 [8 q          topicStr                                 = SysAllocString((WCHAR *) L"system");! v5 H( Q4 \& k# C' u2 x; I
        VariantInit(&pokeVariant[2]); / P# @( X2 E+ ?( v" y  A$ ~
        pokeVariant[2].vt                 = VT_BSTR;8 J# x/ N$ C9 k& G
        pokeVariant[2].bstrVal         = topicStr;
+ q' V: f5 p  \# R3 D! z6 r
( ]  v5 h3 ^* v+ x& \% O- f//        Set the DISPPARAMS structure that holds the variant.; d( K$ ~: J6 H' B3 X% T
  [0 y4 N4 u1 F! a" ~/ t  o. K
        dp.rgvarg                                         = pokeVariant;
7 ?: N& A7 O3 j. r. ^+ U5 A+ R- H; D        dp.cArgs                                         = 3;, N% E' l" X" l/ u) m+ g+ B8 m
        dp.rgdispidNamedArgs                 = NULL;
$ w  ]/ x4 g% ?  M        dp.cNamedArgs                                 = 0;) V  b& @0 w( ~3 x2 k. w/ r

5 `+ s( K5 M+ }* ~' W//        Call IDispatch::Invoke()
* r; I6 m; V  a* m. D0 z+ c/ u7 W. T! L; A, |
        hr = m_pDisp->Invoke(1 s3 N4 L5 T% O! o3 O& s
                pokeID,
; \7 f& U$ G* L                IID_NULL,
" H- X% E+ B# P2 a- V                LOCALE_SYSTEM_DEFAULT,! g/ H/ Q1 s% Z3 ]$ _2 c7 f
                DISPATCH_METHOD,
/ p9 t$ C/ v) s9 d* u! {                &dp,% d7 B: h& [" C, a
                NULL,
! K* A2 ~) P1 W" E. Y) J% U3 `                &ei,
: N( C, I: D- k0 n+ x' y                &uiErr);
2 a( T  @3 h. ~3 P9 G5 Q1 a/ k: n
        SysFreeString(topicStr);7 |" d; ?+ |, e
        SysFreeString(itemStr);6 q# W* {) A; k
        SysFreeString(valueStr);" w3 V- w. T* g4 L; Y, r2 H: L1 v

/ Z1 ^3 _$ [* v; r$ t! N! G现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
5 k8 D) {9 ~7 j: t此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
  Q: A9 g6 N1 O, X& Y( e# E/ W4 I& T2 B: o( a" K
$ ~# g/ q4 A: e4 g1 G' q+ g7 Y$ c
2.这是request的程序
. I/ V0 k- i" {3 Q//  Request a value from Extend/ F- L# K! k/ S
//
$ ?4 {( b# z: o% g' m//        Initialize the variant that will hold the BSTR.  Set the variant's
% m' O7 x% j( J0 y7 o: q/ S* N; |//        type flag to indicate the fact that this variant holds a BSTR. Place the( V4 u8 @6 r$ u4 w/ r- t9 }* ?* c  y2 a
//        BSTR into the variant structure.
: S) [" C- x4 M* x" Q: q$ y' K2 H
2 O: T, \: ?* X. n9 J6 r) G7 \" |        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
3 e, [% b! H, }$ O, B0 D1 s        $ j/ b7 K" i( x! }. X) Q9 o# m/ C
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
- n/ q8 P9 d! u& E! R- @        VariantInit(&requestVariant[0]); ' M* H( C: x+ S
        requestVariant[0].vt                 = VT_BSTR;
: _2 u) T0 v  U1 P1 \6 k7 P1 E        requestVariant[0].bstrVal         = itemStr;
  y# p$ Q3 c) e: t; N- \* d
0 ^7 U" R+ _: A+ {$ m% t6 c          topicStr                                         = SysAllocString((WCHAR *) L"system");
6 [" w. z; r8 Z8 R) f+ F& n; u* ^6 {' s        VariantInit(&requestVariant[1]); ) \7 I7 y+ z; ^
        requestVariant[1].vt                 = VT_BSTR;
- B) Y# t0 G! q$ k! w+ j* \4 s, s        requestVariant[1].bstrVal         = topicStr;% o6 v/ O% Y  G, u
5 b7 ^% \/ I# l9 l% }: J1 C
//        Set the DISPPARAMS structure that holds the variant." S% e5 [5 Z. R
6 U+ \; j6 `( l! M; x
        dp2.rgvarg                                         = requestVariant;  A6 W- ~; q4 @: R& S
        dp2.cArgs                                         = 2;
+ M9 |& Y3 D# g& Q+ x, S        dp2.rgdispidNamedArgs                 = NULL;) k2 c& i$ D: F6 M
        dp2.cNamedArgs                                 = 0;$ W( p, O; `. a" O

7 D# C/ C! E5 G1 _         var.vt = VT_EMPTY;
* p0 {  q: `& J' b$ m9 D/ c& D" w& |
& m& i& x# Z: e7 y//        Call IDispatch::Invoke()
+ X, Q4 w0 y, {  w0 b7 H4 G: v
+ p  Z) T+ Y% ]0 K        hr = m_pDisp->Invoke(
. d" h8 w5 B$ @                requestID,1 t/ H0 N) {% ?  O
                IID_NULL,
- J8 L; o' @& U0 M+ ]                LOCALE_SYSTEM_DEFAULT,0 k: P& ^' }1 I& C+ n
                DISPATCH_METHOD,
/ U9 O- |% H& q  j; b                &dp2,) |6 H1 s  L( L! o' M
                &var,
: i" p9 u# a" y. S                &ei,/ @4 M' |5 q3 x& r% u
                &uiErr);
/ k2 w0 a  v) q' `
8 [2 q& @: Z* m4 M5 X        SysFreeString(topicStr);9 l* |/ M  N  J
        SysFreeString(itemStr);) F# m1 u& \2 Z' ~- Q
请问该程序是获得extend里面的哪个值?
! i7 a- U$ X$ o& Y' ~如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-1-7 05:35 , Processed in 0.012443 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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