设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11118|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
0 I# S7 x7 p! P) iName = (WCHAR *) L"Poke";
  T5 _; [4 y: Q0 f$ V                 . _4 G& A7 a" U0 k) d# }3 Z
        hr = m_pDisp->GetIDsOfNames (
7 w" a% n+ p. D                IID_NULL,                                // reserved
) w  q8 ]* q- z                &Name,                                        // Array of names to get IDs for4 C: z# T! o0 o
                1,                                        // # of names in the array
# B' Y8 V! v; j: C3 c% n                LOCALE_SYSTEM_DEFAULT,        // System locale3 O; M6 c6 @! K. {$ x# j9 f
                &pokeID);                                // Array of IDs to fill on output7 M& }2 j6 K) g/ u9 F$ L' C
                       
4 D8 R! E+ t5 M. D# ]" h* D. m        if (hr)# W: A/ o' f5 ~7 S" ^
                {
+ j1 w2 L+ E! r+ _+ s$ |                MessageBox ("Get Poke Unsuccessful");
7 O: U( K, t: i" H4 X# r                return;
- ^& z* ^" N5 O# i1 |9 |                }
6 t* |  k+ ]# y1 E7 N5 g6 V4 G: Y' c4 m; `/ c. Y  X7 c/ b5 Q
/**************************传递数据给extend**************************************/
( i1 ~, }6 G, S. p0 y5 d        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);1 J% A& ?+ ?. y! U! m
        4 t8 L, }9 V; h* {- P
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
9 A6 _4 H- s7 {0 L. T        VariantInit(&pokeVariant[0]); 1 e4 p7 _9 Z: ~5 `0 K8 r
        pokeVariant[0].vt                 = VT_BSTR;* ?3 C4 F1 l" g6 N
        pokeVariant[0].bstrVal         = valueStr;: P6 E- k1 x# P5 |/ L% z( ^
6 M' j. P2 ~% b
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
- `" j* W) B0 z7 b, X% X        VariantInit(&pokeVariant[1]);
" q# ?+ d2 N( Z$ s+ q, p& i' d        pokeVariant[1].vt                 = VT_BSTR;7 `" Z7 {3 Z* L, p% ?: G; K6 Q; ]
        pokeVariant[1].bstrVal         = itemStr;
" Z* \: @& y. r: A9 l$ B2 K6 Z) z  z
          topicStr                                 = SysAllocString((WCHAR *) L"system");
5 n3 p  n# m, g' a! L- c( i6 U        VariantInit(&pokeVariant[2]); * z: z" \- Z: r- \0 p; \
        pokeVariant[2].vt                 = VT_BSTR;
- C' H% n/ f5 ~5 M        pokeVariant[2].bstrVal         = topicStr;
8 G: S+ f& j/ D6 \. f) M$ y. r) q4 [6 r% @; |
//        Set the DISPPARAMS structure that holds the variant.
; C0 |3 Q) f2 @& a; [! o
4 _! C% \6 x, {: v6 B9 N        dp.rgvarg                                         = pokeVariant;
! O& j) d  ?0 R  M: N1 F% \' l) }6 r        dp.cArgs                                         = 3;
9 h9 z$ ~0 l9 t; F% B% _, I' p        dp.rgdispidNamedArgs                 = NULL;8 L" o7 X, M* A* `3 H
        dp.cNamedArgs                                 = 0;$ Z; V, t; ^/ r  a2 G
8 H# @0 i) ]; C+ b
//        Call IDispatch::Invoke()6 c$ V. a  M+ P: u. J. t
7 G& ~4 i2 `- [& {
        hr = m_pDisp->Invoke(
' |+ [' V9 w1 }, y4 y9 p2 ^                pokeID,8 Y2 @$ k: P( \0 D% Q9 L1 s1 r# H
                IID_NULL,
! A( p' A. p% T                LOCALE_SYSTEM_DEFAULT,* Y3 \; y( m: i! F3 F3 M9 R* g
                DISPATCH_METHOD,. f. E$ f. i$ q3 f2 j
                &dp,# [9 |/ i" M$ C$ z
                NULL,
* H& Y& p8 P: W; O( |0 Z                &ei,$ J4 Y2 X# l, N. F1 k: Q: w/ p% W
                &uiErr);! r% E4 L; H$ ]

/ k% p5 T8 h' f" X6 i; D        SysFreeString(topicStr);1 Y3 t% d8 }  V1 ]- _0 [7 W
        SysFreeString(itemStr);
3 j" Z  H2 b  T3 S' @        SysFreeString(valueStr);
0 |6 |4 e! w* Z& n$ |& r+ o5 R
6 Y' e9 V0 U$ M$ P7 ^现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???( O; h. v3 F: H3 f/ A8 `1 g  @+ e
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????( [1 `2 E5 j  }/ |
) `, p) `- ~! `$ u! c' {

2 b# b$ l9 H( B( u" [0 d2.这是request的程序
+ ~& O- a6 E+ p( K; L# J; l) X0 w//  Request a value from Extend8 `5 C( {- {* j9 T/ T# b3 Z7 i6 s
//0 J' z2 g2 E: l; C5 v
//        Initialize the variant that will hold the BSTR.  Set the variant's
$ c0 i% f% R! ?" r1 t4 N9 a5 X7 f//        type flag to indicate the fact that this variant holds a BSTR. Place the
5 a& S% b5 s. J% F) f3 P; |1 ?6 L//        BSTR into the variant structure.- m" R1 F) b( w

3 H$ T. Y5 D. U" O1 ?        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);% h1 I4 \* }  E. d# H& l
        # M9 b2 S: D% t4 H& t! |# ~: k
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
$ ?: O0 R8 G9 t& t        VariantInit(&requestVariant[0]);
8 i7 s, a# K* k% m        requestVariant[0].vt                 = VT_BSTR;7 \% ?3 w+ K5 Q# W
        requestVariant[0].bstrVal         = itemStr;
6 k$ E% `  i1 S4 u- A! U' q$ W; W7 R% E6 U) M
          topicStr                                         = SysAllocString((WCHAR *) L"system");/ @, \7 F& y- G
        VariantInit(&requestVariant[1]); 6 c9 T' {2 _+ M# E& g
        requestVariant[1].vt                 = VT_BSTR;
  E9 A& L  m$ y7 I( R5 L' J2 W; w        requestVariant[1].bstrVal         = topicStr;# o$ b9 g  T/ z4 s+ d5 P, j, c' _- p
5 s2 C* o! S- v5 w/ R
//        Set the DISPPARAMS structure that holds the variant.
2 F7 P- A7 F- V* {6 K; Q: O# X- ?
        dp2.rgvarg                                         = requestVariant;
8 b' Z  P! f8 k; e& n% f( f        dp2.cArgs                                         = 2;& t; q/ z( }7 i, i$ k2 [
        dp2.rgdispidNamedArgs                 = NULL;0 U: u/ w$ b4 v( y, M, F' ?4 V
        dp2.cNamedArgs                                 = 0;. E+ {! I9 Z5 T, H5 A
( Y- o: u( d0 Z! s9 ^9 p
        var.vt = VT_EMPTY;5 K: A1 L7 _+ ?1 v
, D  r2 ]7 ?" X; U
//        Call IDispatch::Invoke()) u9 a# a# a2 e
0 ~6 X( t3 ?" \
        hr = m_pDisp->Invoke(' ^+ W/ U: b9 i
                requestID,
5 K; \! q8 }$ X. F- Y                IID_NULL,( ~0 a# a4 J3 |/ B- i$ f
                LOCALE_SYSTEM_DEFAULT,
! l5 F9 N* Q1 \6 C                DISPATCH_METHOD,
6 G* R5 U& l- Q; |0 z9 g                &dp2,
; s; a* A0 Y) h7 X0 {. Z7 C                &var,$ o1 S! Q' M5 P& R8 V7 }
                &ei,
; D* |2 i' S. ~  {5 \                &uiErr);
, r) ]5 |" H+ o# S% i' h/ Q
9 i. o5 v9 b2 \/ K' {8 J% U        SysFreeString(topicStr);
1 o7 m! n6 D, n. h5 |9 U        SysFreeString(itemStr);
  O6 _( b- ?7 s请问该程序是获得extend里面的哪个值?
/ ~0 |! s6 v  M+ e, @如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-27 07:18 , Processed in 0.017639 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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