设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6892|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:, R" X( I" g3 w$ M
Name = (WCHAR *) L"Poke";0 X& g- e4 q5 Y: |0 ~' N
                
& F6 C' _! L& Z7 z2 [7 u        hr = m_pDisp->GetIDsOfNames (+ m  R: C3 ^# z% X" ?, o, Y
                IID_NULL,                                // reserved( d, O& N" J' l
                &Name,                                        // Array of names to get IDs for
6 R5 J+ ?- k& t; F8 B                1,                                        // # of names in the array
* a: h$ a" }, b* S. l6 G4 b  l& S6 J                LOCALE_SYSTEM_DEFAULT,        // System locale' @) R8 e) s$ c- p" `' C. a1 H1 q$ M
                &pokeID);                                // Array of IDs to fill on output- `* G# I8 K  f# d4 X  P
                        $ J0 K2 n# }, s/ B9 r
        if (hr)
9 g3 f. w. Z% a$ P: p$ `0 h                {, O; `' A- ]9 {: ~. C5 d* q
                MessageBox ("Get Poke Unsuccessful");
; C1 c; c# K3 E7 l                return;% X0 Y* S4 H" i( T
                }8 Y) ^& l" R5 k- l
1 B7 x( J+ P1 Q8 n# k( ]0 E
/**************************传递数据给extend**************************************/" U. A2 n% M# o: v) Z% c
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
* u7 j* Y5 e+ O$ M        + _; g4 f4 ?. S1 N& B' U
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
0 ]# E% t9 j8 H6 F: H( T        VariantInit(&pokeVariant[0]); ; D: A, s& m" w% F1 h
        pokeVariant[0].vt                 = VT_BSTR;
* w+ o1 x  r% Z, i6 P( a" g        pokeVariant[0].bstrVal         = valueStr;
" R+ G1 s7 ?, h. C; e0 A8 b9 x
8 a1 j! N$ t" P; v  t- O- l' A         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");3 F( i6 J  _( v# s! s+ h3 e
        VariantInit(&pokeVariant[1]); 9 z  U8 I+ c- g! ]
        pokeVariant[1].vt                 = VT_BSTR;
, h/ @6 x- R" S1 K  c3 V) a7 I; S( v        pokeVariant[1].bstrVal         = itemStr;8 w. U! B: M2 ^7 Q
4 ?8 d% y' ~, s. P
          topicStr                                 = SysAllocString((WCHAR *) L"system");
( [% Y3 q* s; T, b0 x' S        VariantInit(&pokeVariant[2]);
. W  s  T5 G% a        pokeVariant[2].vt                 = VT_BSTR;
; ?& D6 v* a+ Z2 w: {; O" V$ J+ p# D        pokeVariant[2].bstrVal         = topicStr;
2 U7 n$ y2 T1 f* I. P5 h% Z
" @! h, i7 s7 J' a4 }//        Set the DISPPARAMS structure that holds the variant.) l$ G% G7 @0 S$ I% [* W( x3 d
  R0 ~$ e! H/ V) r; t, r0 i
        dp.rgvarg                                         = pokeVariant;
! s9 S7 A+ U% C6 N8 n8 b        dp.cArgs                                         = 3;
8 }3 S, r, G1 ]; G/ B        dp.rgdispidNamedArgs                 = NULL;. P3 k9 e9 j" j
        dp.cNamedArgs                                 = 0;
! x# N. l# J/ U2 ~! e
% S4 r- m$ q+ T3 q//        Call IDispatch::Invoke()
4 Y" c4 X- |9 I3 }7 p! a" C4 Y; \3 H# ?8 b
        hr = m_pDisp->Invoke(
/ `, [2 ^( u: M  x                pokeID,
3 U0 N2 f" ~7 F9 Q4 {7 Y  O                IID_NULL,
" K: Z! H6 q& _6 m                LOCALE_SYSTEM_DEFAULT,: w" G5 e' G+ x( \* M8 y* U
                DISPATCH_METHOD,4 }9 [  j5 ]2 n
                &dp,
1 x0 T+ W: {# W, J1 y                NULL,; r% Y$ h- ^& m; j+ n
                &ei,* V9 Z7 f2 U( {# w. B
                &uiErr);4 k* Y( L  l' {5 N1 Y' x3 A+ m1 D

8 Y/ b7 m$ A) t* N; c% k3 @        SysFreeString(topicStr);' p$ Q0 n/ G1 ?9 D* w
        SysFreeString(itemStr);
8 F4 }" R( P6 A3 W        SysFreeString(valueStr);
" {/ _# i! j- l0 b0 w1 m
$ Z& L9 }. J) y$ e现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???8 b) q7 e# h' x5 F" v
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????  u3 o& Q/ G5 W* v  A
' w8 R4 V$ {  p

4 t1 f) _2 o2 y; _* o. |8 Z2.这是request的程序: u( e) q. t( P( w1 Z
//  Request a value from Extend
' R, n, x6 o4 E* b6 g8 M6 ?//- C$ ]& z! G& B$ C4 |( P$ |
//        Initialize the variant that will hold the BSTR.  Set the variant's: G$ Q6 W) |' J# X7 C1 o, A7 H
//        type flag to indicate the fact that this variant holds a BSTR. Place the! |9 Q7 E* q) M* P
//        BSTR into the variant structure." [+ k  n1 n# z- P7 Q. N3 f5 r* e
3 Y% q: C( c* i2 X. h2 e) R3 d& \
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);# H4 m( {( {* D( E4 P6 v
       
9 i' h& {5 l! ^  d         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");' x0 E4 X+ {- n* `  r/ i- g
        VariantInit(&requestVariant[0]); / Q2 `0 N' g' @
        requestVariant[0].vt                 = VT_BSTR;4 _& Q9 E$ e, j5 t/ c2 I8 W
        requestVariant[0].bstrVal         = itemStr;- u( G9 i/ K9 J! S
3 j; ^  R% g6 s/ ^- d: O0 S
          topicStr                                         = SysAllocString((WCHAR *) L"system");
& Q1 t* z, u- ~: _9 F! n2 H$ y        VariantInit(&requestVariant[1]);
0 d3 j9 N- N$ Z3 R7 J        requestVariant[1].vt                 = VT_BSTR;. I0 ?0 M5 {2 r7 H. Q+ Y9 G
        requestVariant[1].bstrVal         = topicStr;
4 o& w, Z# P+ L+ r% X/ Q: `4 G, X% J3 h6 P% R: i( I
//        Set the DISPPARAMS structure that holds the variant.2 a& @, @& N% D" X$ E

# D" A/ M! l7 l) g/ c# z        dp2.rgvarg                                         = requestVariant;
# l$ T8 a( Y3 \        dp2.cArgs                                         = 2;
- t# ^! p- Q$ t  g' a  t, \+ L        dp2.rgdispidNamedArgs                 = NULL;; y) P3 s' `8 |
        dp2.cNamedArgs                                 = 0;
2 `% T( K4 B8 F* C6 v3 [1 v5 Z! H0 n0 z! w! L# v( [
        var.vt = VT_EMPTY;
' u: n, M6 m8 h0 e0 y
- R. S/ r* \: r//        Call IDispatch::Invoke()) l  b4 l. O; u7 N& v, R

' p% G( I7 X5 n        hr = m_pDisp->Invoke(: j# n9 `3 @3 Q+ |6 r, F# N
                requestID,
4 Q: P% M8 t: X                IID_NULL,: t0 T( g" E* p) d: _
                LOCALE_SYSTEM_DEFAULT,3 \* e) I3 P) }' O' M* W+ g" z
                DISPATCH_METHOD,
+ s% \; u( X0 E                &dp2,$ o% ~; m' w8 f% K3 u3 v' J
                &var,$ q# U: G4 \4 p. ?/ m6 b- N
                &ei,6 N) O( G* [$ B- l
                &uiErr);! c; o2 O( m$ b/ {1 K( a/ M0 ]

1 L6 z5 M$ @' r8 `5 Z        SysFreeString(topicStr);  H( G  N+ j( F
        SysFreeString(itemStr);
$ k; W% X. p0 p6 h! M请问该程序是获得extend里面的哪个值?
/ a! e6 P- c1 B7 a& o如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2025-12-10 23:44 , Processed in 0.014533 second(s), 13 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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