设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12558|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
/ M; P' M) y2 FName = (WCHAR *) L"Poke";
  ?/ V% S$ f" X% F/ {" Y+ m8 o/ V                 * P& T1 E6 P6 ^; Y4 E! ?
        hr = m_pDisp->GetIDsOfNames (
) u' k, V+ F9 M                IID_NULL,                                // reserved
9 Z! G0 X% q1 z. R2 l                &Name,                                        // Array of names to get IDs for0 S& @, x6 G( q! E
                1,                                        // # of names in the array) l; a$ G! H% O" D, p2 }9 S
                LOCALE_SYSTEM_DEFAULT,        // System locale. Z% B; m# H7 F* d( x7 t
                &pokeID);                                // Array of IDs to fill on output1 @6 ?6 v6 D" |" `- W8 c0 r
                       
. h3 g/ I3 T/ Z( |# Z        if (hr)5 I, u& u  T; I" @! J
                {: S* C! Q$ Z$ R1 T
                MessageBox ("Get Poke Unsuccessful");
3 |2 m' t% ~9 z7 i' }( T                return;5 S1 E. p. a0 j. ~; x' O' Z' _
                }
+ C/ R1 }/ t& @3 j
: v' G+ J+ l# o+ A5 j/**************************传递数据给extend**************************************/3 C6 [, _  m- Z- {( I4 m( z/ n
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);* u4 ~6 F5 U; w8 ?/ p* ~# G2 R8 o
       
1 l+ t8 z+ M. c* N         valueStr                                 = SysAllocString((WCHAR *) L"1232");
5 S+ L5 U, ]( \, I        VariantInit(&pokeVariant[0]);
  h, [, j% ~! f; a" a: x6 R        pokeVariant[0].vt                 = VT_BSTR;& @* O4 o4 `2 n. f6 E
        pokeVariant[0].bstrVal         = valueStr;
- y% Z: y% i! C- v
4 X8 D% l# {' P& P5 c6 Z" b         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
8 c( B+ N2 M) }4 ?& I$ v        VariantInit(&pokeVariant[1]);
, \" t- K/ Q/ _# h' R, z% A        pokeVariant[1].vt                 = VT_BSTR;
+ `1 p% S5 t' J* R        pokeVariant[1].bstrVal         = itemStr;
8 q7 d0 @8 `6 m  m$ k( ?
! E' L4 [' A  ]) O5 G          topicStr                                 = SysAllocString((WCHAR *) L"system");
% I3 e4 |( A4 h# _$ @7 ^4 V        VariantInit(&pokeVariant[2]); 0 l3 `! z- x$ r" _' G% M. B
        pokeVariant[2].vt                 = VT_BSTR;. U5 L5 M* |  }# P/ U$ W6 j: d, s
        pokeVariant[2].bstrVal         = topicStr;
$ q, U+ I) R3 w8 K
. K! Q9 Y4 z+ S' b) Z//        Set the DISPPARAMS structure that holds the variant.) L2 [4 r* z1 B2 T! x# w$ i0 O0 x

6 W3 J. h5 g2 {5 F: J) n2 k        dp.rgvarg                                         = pokeVariant;- K: L( |# m2 _# a! g8 O( m# M6 N$ H7 y/ u
        dp.cArgs                                         = 3;' \* W) l) i/ n% z1 V
        dp.rgdispidNamedArgs                 = NULL;3 g5 u# R/ A* D. @* \: a8 n
        dp.cNamedArgs                                 = 0;$ Z) u* w, j6 L1 s7 c

8 p) Y/ d# ]/ v) Y4 Y! o+ W//        Call IDispatch::Invoke()- J" O$ a3 F. S! y2 ]: g
5 I7 k- X; U6 }" u9 o7 N3 h
        hr = m_pDisp->Invoke(6 V; }3 m& L) j* T" G. j9 ?2 j2 D
                pokeID,
) [2 Y1 B1 k/ o7 R                IID_NULL,
; r% ~+ {- R+ g$ N* S( ~                LOCALE_SYSTEM_DEFAULT,
0 q' A6 e* I) |2 |! B; F3 o                DISPATCH_METHOD,
2 ]# J; C; B  d+ M- u                &dp,8 g# R* `: _$ z$ o5 ]
                NULL,. l$ i0 R7 N6 H. _& B4 W$ F
                &ei,+ f% J  X; j! |& w
                &uiErr);) n; a# ?* b0 I/ u, X4 T

) F# ]) [( c3 d6 o3 Z        SysFreeString(topicStr);
1 ?2 ]: {: n1 S# S        SysFreeString(itemStr);
1 W) I& ?7 i( {. [& _        SysFreeString(valueStr);+ i1 p7 p2 R9 i0 h7 |& y* @* m% u8 P

2 O- i9 w, ?3 u/ E- U/ @现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
3 W" `8 m# y# a! j1 h  h# c2 b此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
) C4 s! L. A0 T
# q1 H6 W% F5 o1 I7 \
  m& X9 f2 E# }  V4 P: g* ?2.这是request的程序
! `* I% F/ y, G//  Request a value from Extend4 n/ H( o7 M/ K4 A
//
7 d6 ]( I0 u6 K" ]5 V7 d//        Initialize the variant that will hold the BSTR.  Set the variant's% n% j' Y5 y4 D6 ~* Y) _
//        type flag to indicate the fact that this variant holds a BSTR. Place the& g2 j7 J! c5 Z' H7 E& c
//        BSTR into the variant structure.
+ V! c7 [7 ]' {7 l9 R; D' h- }9 f
+ G$ @8 b4 _2 s: F/ d( K, S/ L$ k        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
8 H4 |' K. e4 u- v+ F        - r  h, z4 u2 @' h( _
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
1 d" [: E2 a$ n5 b0 n; |4 ?3 K        VariantInit(&requestVariant[0]); - K# \5 j( V! f3 X# ?
        requestVariant[0].vt                 = VT_BSTR;
2 _: \& r- O& {( S' R: [0 `        requestVariant[0].bstrVal         = itemStr;
, U2 \6 M% n# N- h! W+ O+ X  H$ I
6 Y, y! _* \! |" I          topicStr                                         = SysAllocString((WCHAR *) L"system");
: N. v9 \% J: D" _        VariantInit(&requestVariant[1]);
. |5 {& I* P4 c/ v7 G% Q( L0 p1 ^        requestVariant[1].vt                 = VT_BSTR;
/ R, |9 @! ^# T$ }' j7 u% O( H        requestVariant[1].bstrVal         = topicStr;
* W- O/ e6 f/ E, B  {
4 @  X- f, F( p1 N' H//        Set the DISPPARAMS structure that holds the variant.
* t) c: U- o- [0 i$ y+ W* u9 u0 G. R# t% e8 C
        dp2.rgvarg                                         = requestVariant;6 S* `3 t$ p8 g# g7 _
        dp2.cArgs                                         = 2;
3 G2 ~/ t) M4 P9 P6 T$ H* n1 b# Q7 \$ P        dp2.rgdispidNamedArgs                 = NULL;
: [2 ]3 a' k9 l, g9 ~7 o  z" \1 P        dp2.cNamedArgs                                 = 0;
- c# r' u3 z/ f& l
! e1 A! q; A/ u+ A4 P, h( d         var.vt = VT_EMPTY;
3 F5 M, A0 c* n! x7 o9 Q1 A" C! l& k% G( t: u! w5 t! s
//        Call IDispatch::Invoke()
; L+ G3 D- s: z" ^) [2 m% n3 W
        hr = m_pDisp->Invoke(
6 ?; n6 L) V4 j8 l" ^% N                requestID,: r9 c9 `& R8 u3 y8 `
                IID_NULL,! i* H  Z( ?# C
                LOCALE_SYSTEM_DEFAULT,
0 p( w% u. _2 G* ?                DISPATCH_METHOD,3 b0 W$ ^: J4 S5 f  t6 y$ H9 v
                &dp2,* V) W. r6 o# G$ T
                &var,3 e% c! s- E! ]2 k# r' O& C
                &ei,1 b3 L# S; l% K9 V0 @" o
                &uiErr);
- h8 n) v6 V, \4 c, A% T& w
( a0 ~0 ~7 C) R        SysFreeString(topicStr);
5 f( l1 O, R8 h        SysFreeString(itemStr);9 T! C7 z' `0 X" F; X' j" K7 g+ G: _) V
请问该程序是获得extend里面的哪个值?
8 R' P6 \; `4 z! j如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-8-19 06:33 , Processed in 0.019395 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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