设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10262|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:& i7 \7 _+ T" H4 G8 N
Name = (WCHAR *) L"Poke";, U& e% ~; x* g8 s$ g* U
                
* U# M2 W: h7 v: E: Q7 ?        hr = m_pDisp->GetIDsOfNames (
, Z- G! G# T) R( j; q                IID_NULL,                                // reserved2 V; J' s5 l! @) P) F2 f5 Z
                &Name,                                        // Array of names to get IDs for
9 S. a% f7 A/ j# a  a  J; @' M                1,                                        // # of names in the array
& v: Y5 a; O" b' I" ]                LOCALE_SYSTEM_DEFAULT,        // System locale( M# D( F; e# K: p, m% T; ^) o
                &pokeID);                                // Array of IDs to fill on output, l$ j( ?0 q& b# v
                       
+ x, \; t6 g4 R! i3 J5 `2 [4 A        if (hr)
# x: s- I9 q' S                {
% z0 z) r9 v/ q& ?                MessageBox ("Get Poke Unsuccessful");
0 O* b, t+ N, R  G                return;4 i6 k' G0 |1 x$ o
                }
* T8 u1 s1 Y0 j, T  u9 x/ p/ M+ c7 [; |+ t8 m" h" G$ J/ J5 C
/**************************传递数据给extend**************************************/! s* G8 M2 d# X5 z
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
7 F6 z* v2 R6 `$ Y8 E; O        & T# \7 [6 q! g6 k( [1 F- d
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
8 B% o; y  P3 `. Y$ V' ^        VariantInit(&pokeVariant[0]);
" y* U4 w7 E3 V# x  G1 @3 y        pokeVariant[0].vt                 = VT_BSTR;
2 @* i' ]( f: \: ]& k        pokeVariant[0].bstrVal         = valueStr;( t* t1 |) \. |  M/ W, R6 Y

, Y* v- q( K4 v7 q  r         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
6 i0 Z( V% d. A4 e! Q        VariantInit(&pokeVariant[1]);
# @/ y5 n( C, b& F$ K$ q        pokeVariant[1].vt                 = VT_BSTR;
6 \9 O' X2 `; C* d. `$ k2 y* e        pokeVariant[1].bstrVal         = itemStr;
" ^/ `; Q9 o2 S, [, T7 T$ D7 q) W6 Y8 {7 |8 M0 F
          topicStr                                 = SysAllocString((WCHAR *) L"system");
0 A+ j7 N) f+ y  l        VariantInit(&pokeVariant[2]); * T5 L9 _2 k; B& d2 c
        pokeVariant[2].vt                 = VT_BSTR;5 f' G! _$ n+ _' S( l) {9 w
        pokeVariant[2].bstrVal         = topicStr;
" y4 T7 o  S1 q+ d6 L2 j3 T# C3 s6 h& k8 _+ x9 a- ^5 |- }
//        Set the DISPPARAMS structure that holds the variant.' f% m5 l2 T7 }2 I6 P
1 F8 Q0 Q4 D; ^; L
        dp.rgvarg                                         = pokeVariant;5 T  J! ]3 X9 k. D
        dp.cArgs                                         = 3;
3 g5 _" t, c6 b) L# N. E        dp.rgdispidNamedArgs                 = NULL;0 l; }- U' a& B9 B0 \) h# `  u
        dp.cNamedArgs                                 = 0;
8 c% W9 x5 m) {4 F. R; u6 W/ E/ E0 W
# J1 g- Q! m1 t! t1 x" P# K( X//        Call IDispatch::Invoke()& Y2 f7 E2 E3 q0 Z

- T$ n( E/ {3 n' k, Z        hr = m_pDisp->Invoke(/ `; h/ t1 m" O3 x* p3 t& C/ a& \
                pokeID,- ]; l; b8 l  p7 {1 D
                IID_NULL,
- A4 ~2 e4 h" z5 M2 L                LOCALE_SYSTEM_DEFAULT,
; F/ f) Q1 _0 i; [                DISPATCH_METHOD,
- j; Z3 j0 [4 \4 |9 {( a. _                &dp,
* o5 D% U6 u( y' f                NULL,
0 P) p/ K. X0 j! f                &ei,( i* O% e3 ]( x# g# N( {
                &uiErr);
; B' w- S+ }% u  r- T$ M
0 m; q' t8 F. l& x  b8 V        SysFreeString(topicStr);
. [( h/ v$ p0 J5 N        SysFreeString(itemStr);" f9 w# B& W8 b: p! F$ u
        SysFreeString(valueStr);
1 c8 S9 j! Z" m/ R+ S, ~; [( c% g2 S# p
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
/ G+ A+ q- Q+ _' r- j此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
  m  h! |0 N; r  n, F) i* n3 c- D8 X8 R( [1 T) V1 X

$ i# S- T0 H7 c5 ]; G+ }2.这是request的程序
; N! f2 W% g8 D) @9 i" \3 G: X0 Y//  Request a value from Extend- G: _, |& V3 @& }  B4 K- C# f
//
8 `( q0 t$ L2 h& |//        Initialize the variant that will hold the BSTR.  Set the variant's
3 ~3 F. I* [, u" e3 S( ]- d; Q//        type flag to indicate the fact that this variant holds a BSTR. Place the
! Y( I" p: j& z$ W//        BSTR into the variant structure.
, p0 I' g; w8 y) c' x0 N' ]( l0 ]$ I7 U! R, d- q
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
; U  j8 ~+ D) r- n) y/ }       
: b# z0 i) E# t& y" R  U         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
  B* }  d" W3 X& p1 ~        VariantInit(&requestVariant[0]); 8 \1 H) U) P" h
        requestVariant[0].vt                 = VT_BSTR;) }/ q& o) K* e
        requestVariant[0].bstrVal         = itemStr;) P6 e" B& @! a+ z

: }# @3 h( `* x. [9 H8 u3 R& w: ~          topicStr                                         = SysAllocString((WCHAR *) L"system");2 V3 g  O- u4 Y+ r& M1 X
        VariantInit(&requestVariant[1]);
  x, O' q( a. U        requestVariant[1].vt                 = VT_BSTR;) k, q/ c6 j8 i
        requestVariant[1].bstrVal         = topicStr;
7 \7 y. ]2 i. e, k% n& z9 j
4 e/ Z! m5 r0 h- ^; H0 l//        Set the DISPPARAMS structure that holds the variant.5 K" Z: n9 {8 P" k
) t  Y/ ~( _3 `! W7 t" j3 s2 q  p% Q4 s
        dp2.rgvarg                                         = requestVariant;
. F8 v4 Y" r3 M, l- x        dp2.cArgs                                         = 2;
% _- f$ O& F( Y0 p        dp2.rgdispidNamedArgs                 = NULL;
6 ~( O  M; f& z3 x        dp2.cNamedArgs                                 = 0;' \$ r7 c6 e$ A8 f1 ^1 E0 g0 C
( w) v* f3 v" j  a) H* q5 U2 U
        var.vt = VT_EMPTY;
& g  ~( _( U% m) L) h( L2 y- ~. Y
1 t: _) N7 C7 ~7 k! j# l' L5 `//        Call IDispatch::Invoke(), a& d6 z/ X/ h8 J

% |/ c4 @1 r& [+ X$ T4 V  j! Z        hr = m_pDisp->Invoke(# ^$ ~& n7 U7 R- ~2 @$ o
                requestID,  y4 t- I3 I3 i+ S! G- U$ Q% X% o
                IID_NULL,3 d8 ]/ ]  {" ^4 D0 {3 R" A! G% f
                LOCALE_SYSTEM_DEFAULT,
& k5 h; u" z- W9 C' \# {                DISPATCH_METHOD,
8 `! b: z+ b  B2 U) z* q                &dp2,
; _. i3 q1 ~9 |. K" q( v                &var,. U6 n# f" K" D1 e
                &ei,
( m) Z9 T/ X6 \0 c9 O                &uiErr);  w1 {; o+ z9 O

! u/ v0 A( e. ^' t        SysFreeString(topicStr);/ f3 v1 i) |) Z1 l( ~) O
        SysFreeString(itemStr);0 o( Q8 b' f. }3 F- R
请问该程序是获得extend里面的哪个值?) k% t3 o4 o, A! w
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-18 03:52 , Processed in 0.015298 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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