设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7329|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:6 Y* F7 U$ ?- y/ u. f& N- E6 ^
Name = (WCHAR *) L"Poke";; K1 ?7 I9 ~1 D* f0 k( a
                 $ W- X$ ]/ V3 b, S8 V& Z2 }
        hr = m_pDisp->GetIDsOfNames (9 {- G3 w" c: ]. c( j0 h/ _
                IID_NULL,                                // reserved
. M# O: X& Z# S  R7 K7 H: R                &Name,                                        // Array of names to get IDs for
/ h: P2 e2 x* x! e  _: v7 h                1,                                        // # of names in the array
# H: n. ~- A/ _" e6 I/ r0 s                LOCALE_SYSTEM_DEFAULT,        // System locale$ y7 _) Q0 U# f  ~% x: w
                &pokeID);                                // Array of IDs to fill on output
! h( G% _7 |/ h) \; a/ O7 y. Q- r                       
# C9 @" W( l3 r5 A" W- ]        if (hr). M6 _8 X2 t& u& i) g7 L
                {
  D& E0 n9 ^2 O2 o/ D! y                MessageBox ("Get Poke Unsuccessful");" O$ \9 v1 [9 @5 R- u5 z- [1 r) L
                return;
/ s$ ^3 }" g" s- S% r8 @0 W$ N                }
/ S5 ~/ k( A+ ~' _  a. i; q9 r  `* p! \
/**************************传递数据给extend**************************************/
5 R( w# N# `  }3 M! P        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);& S- w+ x/ c. r
       
. K  M- T5 Z6 X& N         valueStr                                 = SysAllocString((WCHAR *) L"1232");
0 ^) J& {8 W* h7 o8 H. M8 S        VariantInit(&pokeVariant[0]);
0 ~3 |1 Z& z, I4 Y' B6 B        pokeVariant[0].vt                 = VT_BSTR;
& L6 N, w, x* W- u4 I2 ]        pokeVariant[0].bstrVal         = valueStr;1 L6 [. P' K) }- r$ e& V5 H
! Q$ q' X: ^! d, I
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
# M: F5 @, ?; d- h, X2 t4 W        VariantInit(&pokeVariant[1]); . y' e6 J; D- w. T  t+ R4 O1 j
        pokeVariant[1].vt                 = VT_BSTR;  r' J6 R! j+ G, a9 P
        pokeVariant[1].bstrVal         = itemStr;/ d. t; c( }6 }  B

5 L7 `# C) n) W2 n9 E2 F          topicStr                                 = SysAllocString((WCHAR *) L"system");9 `& E1 S0 |$ y3 C+ [! S( I  S
        VariantInit(&pokeVariant[2]);
# v1 X, F$ [. [  o5 Y0 `2 ^        pokeVariant[2].vt                 = VT_BSTR;$ @4 n: R$ `0 e3 Z4 T8 ?
        pokeVariant[2].bstrVal         = topicStr;
, b- M6 S5 T0 X2 y$ ]2 `8 x! f) E; F! K* A/ ^
//        Set the DISPPARAMS structure that holds the variant.
) J% I0 f: V7 O# Z, y. ~, S" s
' i8 e- s- X) p$ N, m0 H' u        dp.rgvarg                                         = pokeVariant;
& @3 l& q: l$ O. A1 Y+ a        dp.cArgs                                         = 3;
; k/ l% H$ [6 @( f        dp.rgdispidNamedArgs                 = NULL;
( V0 n" S9 q, Q, L' e( T/ a. \" o        dp.cNamedArgs                                 = 0;7 y7 F; E) {$ Y- Y

+ r. w; |! G* }//        Call IDispatch::Invoke()
+ p* L! h  w# K5 v! ^
/ s6 V" a- |' K( y        hr = m_pDisp->Invoke(
5 Y' O! k  M9 r- \                pokeID,8 j6 y1 n5 j- b
                IID_NULL," W- w+ M0 {% l9 g$ B5 L7 ?
                LOCALE_SYSTEM_DEFAULT,
1 ~0 Y8 M5 s  _! J' Y% L8 M                DISPATCH_METHOD,+ e" v* J- ?! d+ R
                &dp," U" s% b4 s8 A! N
                NULL,
' u0 l. M* V& S7 i, Z/ q* Q) K                &ei,( i' C! E; h* S8 w1 G
                &uiErr);( V8 L- y1 C% ?6 g4 V! i, G

! z4 O+ J2 z6 M- f        SysFreeString(topicStr);
* B- R" ]* z2 I- T7 j* j* r        SysFreeString(itemStr);7 f  D1 f+ \5 L
        SysFreeString(valueStr);
& q" }1 U8 G! w$ z9 G) T
/ y. P8 S( K2 E- u0 m, `! r; t3 O现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???0 O8 Z) k. g# i) k
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????' K8 B, k2 Z) z+ l7 N

/ s0 N- n( B; @# O% G3 m+ I3 a1 h
2.这是request的程序
2 X5 v& `2 \- }//  Request a value from Extend/ |9 a9 s, g, I- B
//
& I: Q: G4 f& Q//        Initialize the variant that will hold the BSTR.  Set the variant's
$ R$ W9 V" T. \3 ]% r$ u3 Z//        type flag to indicate the fact that this variant holds a BSTR. Place the
  F! w8 {/ L7 Q1 C/ h//        BSTR into the variant structure.
) k7 R- \3 c0 n' C( |
8 ?$ X. u0 b4 o2 w8 x8 k. U        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
9 V5 P, u3 @/ l* C( u       
8 }; m# L. e9 ?* l         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");$ X7 k3 s) p# C- Q8 m( m* y5 o  O
        VariantInit(&requestVariant[0]); 1 r: t0 B4 i5 s# L/ h1 c) @8 r  \
        requestVariant[0].vt                 = VT_BSTR;: G8 W/ X0 S' M* T1 ~" j
        requestVariant[0].bstrVal         = itemStr;
; {) y4 e3 c' k/ v; `; h( _
3 g& I3 V6 U+ {$ t+ N          topicStr                                         = SysAllocString((WCHAR *) L"system");
4 P5 c' Z0 n0 v, d. Z        VariantInit(&requestVariant[1]); 6 Q" I/ C: F- ~
        requestVariant[1].vt                 = VT_BSTR;" L$ |+ r# S; W! [
        requestVariant[1].bstrVal         = topicStr;
& y# s9 |9 {8 |6 j, x, H0 o. |, c
% f# X' z, G  e9 _' n& o//        Set the DISPPARAMS structure that holds the variant.% I, b# @# s+ e1 i

; f3 E9 t# n, T/ E6 C        dp2.rgvarg                                         = requestVariant;
6 v! u8 C. h! S6 D( @+ V        dp2.cArgs                                         = 2;
4 ]- _8 g6 {( }" A: W% @; ~        dp2.rgdispidNamedArgs                 = NULL;
4 y1 l- k. h6 I3 S- h' e        dp2.cNamedArgs                                 = 0;9 P- I5 K2 ]6 l2 D1 D  M& |

0 C/ z% d, L& k6 w: Y! D         var.vt = VT_EMPTY;7 V6 j1 q3 I- i( x

1 W, N% f0 P' g' k4 O//        Call IDispatch::Invoke()
4 Z" b+ n& b6 }
* P' W1 T$ u6 o  o        hr = m_pDisp->Invoke(
" f/ X+ s3 `  m7 f' R- H- K$ W0 e                requestID,' G% v* _: k* i  Y* p2 e- q
                IID_NULL,
% r7 E+ z! e  H' Y% o) ?                LOCALE_SYSTEM_DEFAULT,
/ l7 c2 ^0 r2 z/ ?                DISPATCH_METHOD,
) ^% q0 d& }& d                &dp2,! _3 a* ]+ P7 z+ m, ^/ {8 q# I# `
                &var,5 g+ ?& N+ q) F! D; O
                &ei,5 Y0 T$ ]" [5 H
                &uiErr);0 _. A+ A. P; V; _
9 _* P0 Z* N2 z- E: }( }
        SysFreeString(topicStr);
/ @- e8 R6 {+ R  T( h        SysFreeString(itemStr);" c; a9 m- t% G
请问该程序是获得extend里面的哪个值?
8 d+ {5 q1 S3 V7 g如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-1-14 11:57 , Processed in 0.016306 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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