设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9983|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
5 E+ h6 I8 M$ SName = (WCHAR *) L"Poke";
* B  ^0 \& G+ c                
/ {' C9 F& W- ?        hr = m_pDisp->GetIDsOfNames (
( [5 n9 u! T, p& @                IID_NULL,                                // reserved
  W+ z: G5 C% W: S, Y" _7 \                &Name,                                        // Array of names to get IDs for
) V7 l; X* T- s" R# d  `                1,                                        // # of names in the array
* O9 `. o; x1 U9 D" ?$ r                LOCALE_SYSTEM_DEFAULT,        // System locale. n( P4 E2 m, [) f. W0 t' [
                &pokeID);                                // Array of IDs to fill on output3 w$ ]( p7 w+ W* @2 M. r
                        0 m! t# Q# T: q; E0 H+ R! E
        if (hr)
$ M8 C& W, B4 N+ Q2 E" {) T. b                {
- x: L4 t$ }+ o' X& A+ L3 A! T0 k                MessageBox ("Get Poke Unsuccessful");
+ y1 d1 P3 E5 c) V                return;
# b! Y+ D( f) T* x7 P, H                }
# o2 f3 E3 d4 f7 K/ D
8 j' V4 B+ V0 ^/**************************传递数据给extend**************************************/
3 A/ }$ ?. F# Q) S        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
( s' w4 I* S% w9 D  q, X4 k        ; f- ]7 S; C7 n* C- g2 {
        valueStr                                 = SysAllocString((WCHAR *) L"1232");* k  A% m9 B4 x, I& L* |9 F$ b
        VariantInit(&pokeVariant[0]);
8 F. m! C9 q  [        pokeVariant[0].vt                 = VT_BSTR;4 `& `7 `) \+ [/ X3 @& q
        pokeVariant[0].bstrVal         = valueStr;
, ^# W* N; v% J! M8 q4 W0 c) c0 f6 A4 p- D% z
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
* o9 o4 ^4 Y1 d' A3 y        VariantInit(&pokeVariant[1]);
( m- {& `% A7 U: M5 g7 f        pokeVariant[1].vt                 = VT_BSTR;0 k$ ~9 y* [$ s$ q+ Q( ^5 V2 ]
        pokeVariant[1].bstrVal         = itemStr;1 m, l. R. s4 P% ~* G$ \: ]
  F/ J- K$ r3 V0 b
          topicStr                                 = SysAllocString((WCHAR *) L"system");
* ~3 m+ p/ n8 Q: D3 X/ f        VariantInit(&pokeVariant[2]); + x9 Q& J: t" c2 b
        pokeVariant[2].vt                 = VT_BSTR;7 K9 V0 ]( S! B+ |0 c- f8 [
        pokeVariant[2].bstrVal         = topicStr;6 `( J8 W& g8 J9 m% }
4 T4 ]! Q. h( `- S7 S" ]4 M8 y% g
//        Set the DISPPARAMS structure that holds the variant.
7 W+ G" s5 O6 m2 y
8 P2 m; Y% ~; ^4 v* F2 O        dp.rgvarg                                         = pokeVariant;
8 Z0 G5 N# n% R, T$ w4 C  ~        dp.cArgs                                         = 3;
; x7 @, ]7 E3 M        dp.rgdispidNamedArgs                 = NULL;
( S! N. w( o  v: M/ A        dp.cNamedArgs                                 = 0;& h5 q! G  T3 g  d) C

* Z, D6 z( s0 E# D% M//        Call IDispatch::Invoke()
! Q2 R# |, c8 j& ?; R  t" a
1 f% w9 m: w& u: v3 Z; {        hr = m_pDisp->Invoke(
) D+ w* e  z6 L) a3 K" Z                pokeID,
8 N9 e4 F5 N+ k1 v                IID_NULL,
! g5 K' m$ X9 A; s8 \/ g                LOCALE_SYSTEM_DEFAULT,5 r) ~! ^( z7 R0 Q# y* {1 ]
                DISPATCH_METHOD,
! h  S- J$ ~% w. I+ N! i                &dp,
$ e+ V0 j0 g5 I2 i! o8 p                NULL,
5 q$ V4 t7 C0 p* E$ q: M1 B% Y' m# B                &ei,
9 X& d# g) X" [' T4 g                &uiErr);5 ]- J2 r0 s7 u) X8 ]% s

: O; t, q) J1 m8 x4 t        SysFreeString(topicStr);% z6 c4 f& y  k  }" ]0 p
        SysFreeString(itemStr);
2 Q$ Q9 [" u6 z9 B3 J        SysFreeString(valueStr);4 \1 l, W2 ~% g, p8 B8 q9 q0 F

/ Q/ E# S; d: l& \3 h+ a现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???; C; P. I& x; Q) B0 s
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
2 m/ j. k3 N1 U+ J# {0 i2 V6 t3 {9 P1 S- {
8 }8 ?; e1 \1 b+ v7 d
2.这是request的程序6 V0 H0 I1 v; \# A+ S
//  Request a value from Extend, d2 G7 A3 z8 x; {$ g! o1 C: }
//
# q6 o& }& p) }3 ]/ _//        Initialize the variant that will hold the BSTR.  Set the variant's# O4 b" ]7 d# s8 ?! ^9 \) [, R% D
//        type flag to indicate the fact that this variant holds a BSTR. Place the
1 d1 D( D/ G, s& |( Q: d: w//        BSTR into the variant structure.+ j3 z; R- Y; k0 A# _: U
8 Z/ X2 ?& j% }; ^6 q
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);% H5 f8 j* u6 ?) [# b* g
        7 X, S! e' j3 d/ U: u! p
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
2 G" x# \. A3 N8 y& W3 s        VariantInit(&requestVariant[0]);
& [' d1 G( G& D6 ?: C0 t        requestVariant[0].vt                 = VT_BSTR;
; B+ c  G1 ]; S        requestVariant[0].bstrVal         = itemStr;
9 X2 N0 x% [0 b; T. A/ `- C" m2 ]- q" V2 n9 O- a6 W  z* k; ^
          topicStr                                         = SysAllocString((WCHAR *) L"system");
$ t% I2 @* ]! y. F5 Q        VariantInit(&requestVariant[1]);
' ^" s0 S/ J# t7 h        requestVariant[1].vt                 = VT_BSTR;2 E! E7 Q# i" {8 T# K
        requestVariant[1].bstrVal         = topicStr;
% l1 n, z0 R* @5 v/ H! s
4 e5 o0 D3 N9 c% r9 ~: N- R" H$ z//        Set the DISPPARAMS structure that holds the variant.
9 q7 I, @/ \& P* A4 A1 X1 S4 z  T# |
( v6 G9 s6 ?2 Y; E( f        dp2.rgvarg                                         = requestVariant;
0 A( d- D4 X" ?& i: F; P        dp2.cArgs                                         = 2;- p0 f0 ]& i2 U8 m0 _9 r6 Y& V9 x+ d
        dp2.rgdispidNamedArgs                 = NULL;
! q1 b% G4 [) \, `        dp2.cNamedArgs                                 = 0;
& U5 ]/ b( C" N  ~1 r6 U$ Y% i2 l. |
        var.vt = VT_EMPTY;
3 Q) v9 T: q/ E5 W) |( g% i2 Y; I0 Q7 q
//        Call IDispatch::Invoke()
4 R" ^- `  ]: d  Q# A" [! n( W% h. j7 q, C* [( T
        hr = m_pDisp->Invoke(6 z" [1 q# c; ?( z! X# a% U5 n" i
                requestID,4 D/ {7 U7 A( K& l9 s
                IID_NULL,
( ]5 P/ f1 B% t! L* s# J: p                LOCALE_SYSTEM_DEFAULT,/ C7 @6 h6 U2 O3 x9 ^7 A- H3 W
                DISPATCH_METHOD,) g/ X/ N" [2 _. }( e$ m( i2 r. l& t
                &dp2,) b. h2 l5 v, C
                &var,
- @0 I* v7 r) ]7 k                &ei,2 Q1 m' V$ C# M
                &uiErr);$ w/ B9 q$ C2 G
- x% B( [5 i! V7 P8 x
        SysFreeString(topicStr);' b; S7 }7 Y" y
        SysFreeString(itemStr);0 M/ s9 h& R2 N; |
请问该程序是获得extend里面的哪个值?
0 m# w5 U) u9 ~3 {) d- Z$ l0 ~如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-7 16:27 , Processed in 0.015090 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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