设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11190|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
$ [3 l4 c9 i; {  y9 r9 ?# iName = (WCHAR *) L"Poke";* s* g. l7 m/ R% S
                
! l- j" I: ~3 P* Y        hr = m_pDisp->GetIDsOfNames (
1 @" N3 K7 c# x, }9 R                IID_NULL,                                // reserved
. }* L& I. H, h  s' F/ h                &Name,                                        // Array of names to get IDs for8 q4 f; H; R/ T( l( `+ k
                1,                                        // # of names in the array; Z! I/ i) h; S" \; N! f0 w, R0 K; O
                LOCALE_SYSTEM_DEFAULT,        // System locale' m9 a" }' L) z  Y: l( J
                &pokeID);                                // Array of IDs to fill on output' }! `6 F; Y% ~3 X* A; {
                        . ]: I& K2 O7 @) C$ J/ m
        if (hr)( }0 E7 m% L8 F* i1 v" A5 u
                {- m2 s7 p1 p' s9 B: f
                MessageBox ("Get Poke Unsuccessful");
/ `- ^) W$ i" |  P0 f& S                return;
  H2 T/ u* u3 b0 s  u2 s% H                }* [0 @2 u% a$ _, \
0 T7 |- _' W! W( c# M/ m7 J) E
/**************************传递数据给extend**************************************/
  E1 j4 c' L5 z0 C& y        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);2 ?; M, ~7 ?& h
        7 P3 p* Q/ |( O3 {: S( a
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
6 ]) U( `# v' K/ o' a) x$ P        VariantInit(&pokeVariant[0]);
( f* I) {& s  @2 w5 i" z        pokeVariant[0].vt                 = VT_BSTR;
% r" ?4 c0 d& b6 [        pokeVariant[0].bstrVal         = valueStr;. y% G4 k5 _, y, v, l4 t1 H! S/ s0 l2 p

3 b* c9 U1 s5 r" l         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
. y& ]- B! H; X6 b7 H, V        VariantInit(&pokeVariant[1]);
% h% Z+ I0 e% v' b( @7 u        pokeVariant[1].vt                 = VT_BSTR;* Q9 B/ g/ h' j3 F" I* x3 p  a
        pokeVariant[1].bstrVal         = itemStr;
+ z- w/ D8 y. ^1 V1 r7 j2 N' u" N1 `) R; k+ t; W& h& n) b- t
          topicStr                                 = SysAllocString((WCHAR *) L"system");4 r" S- e$ h6 x7 n1 ~& _2 r
        VariantInit(&pokeVariant[2]); 4 `& Q; r$ [0 d! A6 F9 O5 B
        pokeVariant[2].vt                 = VT_BSTR;7 Z- N3 }9 o: F7 j4 K' C
        pokeVariant[2].bstrVal         = topicStr;+ j5 d! ], W- K5 M
$ w, z: M4 @4 `# L  F& Z
//        Set the DISPPARAMS structure that holds the variant.
$ F# {* y8 n$ @0 r/ J5 B2 a" ~8 \7 j& {) E
        dp.rgvarg                                         = pokeVariant;
  Z. q1 @+ I0 \& l        dp.cArgs                                         = 3;
' J( R4 x& y' a) W. a        dp.rgdispidNamedArgs                 = NULL;$ t* ]9 S; |& V, @, v. S+ ^" o3 c
        dp.cNamedArgs                                 = 0;7 v+ V" |6 p1 z$ ~6 _4 m+ ?
+ U9 R! |& L  f% |
//        Call IDispatch::Invoke()
4 N! A7 ]% L4 O( F' v
' S3 R' G% l# k3 P        hr = m_pDisp->Invoke(
! V' \- S9 a! N6 x" W$ t1 R                pokeID,
& j6 [4 u8 O# p/ ~                IID_NULL,
# K9 e& S& t% P2 d3 K                LOCALE_SYSTEM_DEFAULT,9 [) A+ N+ s. Z% b; H$ U
                DISPATCH_METHOD,' m/ \) a( b0 u: G: s
                &dp,
* [6 p; p$ J# [: H9 K4 N2 e$ Q                NULL,
8 d, h) _3 J* |" `' F                &ei,, d2 Z+ ~" C- L0 N9 q8 |' P
                &uiErr);) q2 u! ]) {( z  U9 I
6 b4 M0 m- m4 j2 e8 Y2 I; ]7 p
        SysFreeString(topicStr);
0 I4 Y7 M) v5 l; L5 N; a1 \9 |        SysFreeString(itemStr);
1 s3 Y: v( N% }# [: f        SysFreeString(valueStr);
1 Y! |1 G: a2 z1 N, N* a, }2 B1 v; B+ O: I3 G
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
: j4 D+ U" w% @1 W! Y此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????- @2 P# ~- z. A- A

+ h$ Y& m7 X$ d! y6 g$ |4 g
% o3 \% d( |- `. H2.这是request的程序
; |& j5 |. c' R4 W/ ]2 O7 y+ p- V+ J% w//  Request a value from Extend! m+ W/ a3 ^2 v5 J: g
//
/ r1 i5 e- _7 [6 M//        Initialize the variant that will hold the BSTR.  Set the variant's( A2 D4 H# i+ D7 ~5 V; H
//        type flag to indicate the fact that this variant holds a BSTR. Place the% z. O) V/ C1 l* U9 P
//        BSTR into the variant structure.; G4 A! O+ C8 [* \: M+ \: r$ U$ J

) N8 I0 ?0 n' p: o: K6 x5 l        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
2 L/ j8 J8 c8 a9 L( Z: |       
7 g  _7 J5 U: f/ k5 @# ?         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
3 g! j) n' T* d2 X7 Q5 A$ c        VariantInit(&requestVariant[0]);
0 g& l$ ]6 \0 Z8 I        requestVariant[0].vt                 = VT_BSTR;
2 g1 D* v2 @$ C  D4 |" `, y        requestVariant[0].bstrVal         = itemStr;
' }# e5 Z  ]( I, Y3 ?  U2 ^. t6 f& e3 _8 Q' j; ^
          topicStr                                         = SysAllocString((WCHAR *) L"system");" ^1 ^) p, ]3 w, |
        VariantInit(&requestVariant[1]);
- L1 @$ g- D. M  s! G1 s8 S8 S  P        requestVariant[1].vt                 = VT_BSTR;
& @; `) _3 ~5 K1 u- Q5 Y/ @1 @: r        requestVariant[1].bstrVal         = topicStr;
! {3 i9 W6 g! D
0 i3 w" K$ J# N. `+ ~5 j  y$ z//        Set the DISPPARAMS structure that holds the variant.
- W& J) N% s3 D: K$ ~; C# `  u& n9 B4 ?7 J& O. ^/ Q
        dp2.rgvarg                                         = requestVariant;' \. S' g, \0 }6 m/ A6 R5 W
        dp2.cArgs                                         = 2;
& i8 p" a1 W" J8 ]. O) H' V        dp2.rgdispidNamedArgs                 = NULL;
# O' o7 r+ \' X        dp2.cNamedArgs                                 = 0;& r# L" I2 |$ g& Z3 t. x

: v' T# V; v% n$ a0 \         var.vt = VT_EMPTY;+ d3 P5 k3 s% \) ?
1 m* t' B5 \6 r' N& S
//        Call IDispatch::Invoke(), m# k( ~! ]' N! Y4 @& l
! W+ D2 P$ M6 |- Z: \1 j
        hr = m_pDisp->Invoke(. }+ r  Q3 w3 _' U* _; T
                requestID,
3 V/ Q/ f8 [6 O/ [2 {                IID_NULL,
" ]3 }4 B. G. t5 R* y) P8 {# E' J% i                LOCALE_SYSTEM_DEFAULT,
" [' l2 v9 T% @% C4 S' d% c                DISPATCH_METHOD,
* {5 h. P1 {6 r8 _( O                &dp2,
7 ^& M4 c' h! s1 X- @- D                &var,. o0 s$ F' s$ M4 r
                &ei,
( P& E$ h: q, i" E                &uiErr);+ G' d6 U9 c* I6 P" q: ~3 M
' r' N- @( p3 q+ e
        SysFreeString(topicStr);
% S" O5 k! F# n  B7 ~+ v, ~        SysFreeString(itemStr);; W% n; c* b: R6 x' N
请问该程序是获得extend里面的哪个值?
+ a4 F! t# z1 c1 |) Z如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-30 16:34 , Processed in 0.015558 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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