设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11220|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:: S& J% @7 q4 ^
Name = (WCHAR *) L"Poke";3 E" k: F# v$ P2 U: G  h% y
                
# o; K0 U; n8 S        hr = m_pDisp->GetIDsOfNames (1 _) b. @* }6 ^/ y! \
                IID_NULL,                                // reserved0 e5 x' v' G; [- H+ Y: X  U+ ?; \
                &Name,                                        // Array of names to get IDs for3 l5 }) ^- ]3 `) f
                1,                                        // # of names in the array; b: q0 C! O! y( k+ X
                LOCALE_SYSTEM_DEFAULT,        // System locale  t6 S# J  z) v$ L! D8 }
                &pokeID);                                // Array of IDs to fill on output9 E( K1 {: J# w* H% s' G
                       
+ Y! x3 k1 _, ~/ A+ ~( P; j        if (hr)7 [. E, p1 G7 u6 z; E
                {  u5 H+ ], _! H  j
                MessageBox ("Get Poke Unsuccessful");" {  L' n: E, \! h' f  a# a
                return;
, A; g% z* M2 J( i4 b2 e& l                }' m, L' l4 {& B4 d8 R( |9 A6 q
& w4 g0 Q( ]" l$ @
/**************************传递数据给extend**************************************/
9 `; W" Y# H! K8 `, G$ B        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
0 s; C6 N! }9 M6 x& w: G, S& H       
  J" u8 T/ z( t5 q5 Q0 l         valueStr                                 = SysAllocString((WCHAR *) L"1232");$ Q7 j. M6 A' ~% z0 ?! g
        VariantInit(&pokeVariant[0]); 5 F7 A2 h8 C) K, e/ C
        pokeVariant[0].vt                 = VT_BSTR;( @) Y/ O! i, b
        pokeVariant[0].bstrVal         = valueStr;! k" l; v/ Q, U% q4 J

  L( N2 ?. c  g) Y" F         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");  p/ y2 L) q% P, R9 z7 P, _( ^
        VariantInit(&pokeVariant[1]);
% ^, Z: A; T& E9 ]+ f6 ?) G$ ?" O        pokeVariant[1].vt                 = VT_BSTR;3 |8 @( d/ l- Z% Y4 \) x5 [2 o
        pokeVariant[1].bstrVal         = itemStr;6 X7 C' p% n, n) b7 i

" u3 T% d$ }  L8 p. p8 K          topicStr                                 = SysAllocString((WCHAR *) L"system");
* i( U1 B; t4 ^9 f/ b1 k        VariantInit(&pokeVariant[2]);
& N+ i! r3 a! J: ]/ F        pokeVariant[2].vt                 = VT_BSTR;
1 @$ M7 R) s4 E  d; ]        pokeVariant[2].bstrVal         = topicStr;
8 V, p' R. E8 Y, J0 g& i' I0 X8 w$ P# I% C
//        Set the DISPPARAMS structure that holds the variant.3 `0 y$ z% Y8 Z- Z8 U

+ s+ _/ H8 n- C, T        dp.rgvarg                                         = pokeVariant;
( o, B7 k0 C2 }( S9 c# N        dp.cArgs                                         = 3;
- e8 W, x, S4 R% o) s        dp.rgdispidNamedArgs                 = NULL;6 l( k* h% O/ p+ e  Y2 \7 M) Q$ k
        dp.cNamedArgs                                 = 0;& _! s3 e. q7 b6 ?2 H

) h" M% _9 y# \# p( B+ k/ S//        Call IDispatch::Invoke()- B. U7 p4 N! ?% v) X$ M

- R. U. o2 Y* X2 u        hr = m_pDisp->Invoke(+ K* S, Q; n( e1 c+ H
                pokeID,3 B/ E+ u- R3 |3 c& n
                IID_NULL,3 P; X% |; |  j0 `  B2 \" h0 h) u
                LOCALE_SYSTEM_DEFAULT,' Q% c7 N- n, @; B+ q0 t; v* c
                DISPATCH_METHOD,
4 f" j' D% ?1 Y5 P' K                &dp,8 ^; t1 T0 R( t1 [" i- a* f; k
                NULL,
# z2 ~# l. x# L$ O                &ei,
' h9 o* j  u+ O                &uiErr);
' K6 Z/ v+ S: y- R8 z* E6 v
, O+ m7 n/ O0 N, \7 M4 J        SysFreeString(topicStr);
/ }% ]/ Z# E8 f/ g- b, ?8 u        SysFreeString(itemStr);+ s& r! G# f3 N: Z, @; y
        SysFreeString(valueStr);# [1 x& V+ _( W

- D# s8 o" I3 M0 S. r  ^" L) m现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???" w) ]1 v7 U) H% {
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
/ _8 W4 ^: U" a( C2 x4 [2 e" I- T' b/ a. K
1 x  U% {4 B% N; g5 Y* `
2.这是request的程序
# k% v  B3 D) f8 H//  Request a value from Extend, l2 e! W% w8 M/ Z; }
//
0 A' a$ C* P, c7 B//        Initialize the variant that will hold the BSTR.  Set the variant's
" [" i9 e) t( _. Z; y+ G//        type flag to indicate the fact that this variant holds a BSTR. Place the0 C4 ?$ r+ s- H! Q. I1 J7 W0 S. F
//        BSTR into the variant structure.1 o+ }- v7 F+ y5 j* ?

4 n& x% p  E  W5 m; i        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
3 A7 [. y9 l, C        ) Q3 N: q0 U- W% u' Q4 H( o6 o
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
3 `2 W" \# T! b1 y0 @        VariantInit(&requestVariant[0]);
' e2 g' |; M9 S        requestVariant[0].vt                 = VT_BSTR;
1 R' H" G( M  H  Q( K        requestVariant[0].bstrVal         = itemStr;
! D! h+ h$ `5 [6 z+ |7 o/ h! x
( M* b  y% y- ^6 a          topicStr                                         = SysAllocString((WCHAR *) L"system");
' D0 k3 L2 n; s( \) O, e9 y  t: u        VariantInit(&requestVariant[1]); $ Q% {( a$ L' s1 W% c
        requestVariant[1].vt                 = VT_BSTR;
& A; [+ d  l' a! Y8 ?- V6 x9 W        requestVariant[1].bstrVal         = topicStr;5 i/ S) M8 i9 j1 i4 p" p
# r* Q! E1 ]) {% {3 w
//        Set the DISPPARAMS structure that holds the variant.
9 l" U, s7 T& N6 e
2 E6 ^  T0 u2 U' X3 f        dp2.rgvarg                                         = requestVariant;
7 O' q9 o$ c+ s) Q: `2 ~        dp2.cArgs                                         = 2;
9 V# R. w& q3 }9 x- r        dp2.rgdispidNamedArgs                 = NULL;2 [/ o$ ~5 u7 d' ~0 f
        dp2.cNamedArgs                                 = 0;9 X; D+ ]- |( E
- I8 E$ _8 y1 t. C
        var.vt = VT_EMPTY;1 F  Q; g# `- X

( w9 S: q. |$ x2 k//        Call IDispatch::Invoke()" d# S0 A# C, R( v* o6 d) W. q
2 K* m* f3 ?8 d& }2 X
        hr = m_pDisp->Invoke(3 |8 x. h* ?& g/ ]9 L
                requestID,' ]. Z& M, c' _; N% s0 c
                IID_NULL,
3 w) ~) V& C3 q6 \0 ^6 G9 W                LOCALE_SYSTEM_DEFAULT,. ?& ^% ]  I9 M$ b1 N
                DISPATCH_METHOD,, E3 a2 \3 ^; S+ P
                &dp2,# ?4 x5 G1 K! ~- Z) Q; y& e
                &var,
7 v" D! s5 L, f6 c. x3 B2 v                &ei,
' F/ z( h( [0 X# S* m+ K& c                &uiErr);' O! G. _! w$ I. k" `
( k% i9 F5 C4 R2 d  u5 K, z1 L
        SysFreeString(topicStr);" y" t, q% l, \0 b, L- Z! R
        SysFreeString(itemStr);: v5 R1 G2 u( F. K" h2 I
请问该程序是获得extend里面的哪个值?
2 a, j7 |  ~6 j6 n+ g4 x/ P6 `如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-7-2 01:14 , Processed in 0.021231 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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