设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8746|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:/ h* @) I' A! m) ^: d3 z1 |
Name = (WCHAR *) L"Poke";
. Y, T8 g, M. Y% ]. _; k                
0 H- G, X! p5 _4 o1 k& N        hr = m_pDisp->GetIDsOfNames (( v6 o& N2 ~. R7 r
                IID_NULL,                                // reserved
4 _9 q4 ^0 p3 `0 \5 N6 Z                &Name,                                        // Array of names to get IDs for
' p* k$ f- F" X. C" u                1,                                        // # of names in the array# ^; C4 A" X8 C# L
                LOCALE_SYSTEM_DEFAULT,        // System locale
3 i/ t6 l: d. J( u* p- u- ~9 T* Q                &pokeID);                                // Array of IDs to fill on output5 c) L8 C' a3 P6 n# L
                        7 I7 K/ l( T/ l0 v  U/ h: y$ D  Z4 G
        if (hr)1 M( A5 U: P/ v+ g
                {8 a( R7 K: e7 G5 ]" G( \
                MessageBox ("Get Poke Unsuccessful");3 V) U& u* \/ I# e8 f8 E+ p
                return;
8 T- x8 t7 `; c0 p$ W* F. q                }
; y$ }' e2 @2 F5 {4 g) u' }
5 ?/ @, V/ o' O' v/**************************传递数据给extend**************************************/
+ ?/ D2 l5 q6 e& ~" \        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
) E  d5 N6 O" D  n        4 t9 P1 o) Q+ G4 ?" `
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
, c3 R; h/ Q+ P0 D% F% Y% \        VariantInit(&pokeVariant[0]); 7 d: `. R5 A2 b: g
        pokeVariant[0].vt                 = VT_BSTR;
; U7 w% J8 L! O' ~4 U        pokeVariant[0].bstrVal         = valueStr;
! {' V# ~2 R1 ]  O3 w9 q4 |- i  ^' |# q/ I
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");  y0 R% E) _$ o* [# J. e0 {$ S; L
        VariantInit(&pokeVariant[1]); $ }& W# U# d( ?) Y- o* [$ u
        pokeVariant[1].vt                 = VT_BSTR;
5 ?# W+ g6 k0 e& h2 |8 v/ K: n        pokeVariant[1].bstrVal         = itemStr;, P9 n: y4 _8 n" f
. b) m9 v7 S# B/ x) e+ c
          topicStr                                 = SysAllocString((WCHAR *) L"system");
/ j9 s$ ]7 b0 Y; z        VariantInit(&pokeVariant[2]);
2 n1 V/ N7 ~1 F1 l        pokeVariant[2].vt                 = VT_BSTR;" v+ \$ \: {2 A8 y: p- _( e
        pokeVariant[2].bstrVal         = topicStr;
$ R/ Q. a- ^. d
! @* y6 o# `# I, ~//        Set the DISPPARAMS structure that holds the variant.% I7 r* ~3 l5 t: v
+ T! ?5 |# J4 K
        dp.rgvarg                                         = pokeVariant;
( U( R& w! u" `, |) G- i" e        dp.cArgs                                         = 3;) \3 o8 q* t: Z+ [1 Z
        dp.rgdispidNamedArgs                 = NULL;
  w  H0 |" e6 c3 D1 b5 }; g        dp.cNamedArgs                                 = 0;
6 w6 j- h$ r" W% I% n0 H
8 `- w: c1 R. `//        Call IDispatch::Invoke()
& D9 J5 b" q  |$ g9 w/ o7 c
2 o6 H  j6 F2 u' |/ n- n/ W. V2 Q        hr = m_pDisp->Invoke(
+ `& U( U) J+ F& B8 n3 s                pokeID,
* c6 S6 ]- K% l                IID_NULL,# A$ }% L8 v/ r7 j+ _5 o0 I: V6 ^
                LOCALE_SYSTEM_DEFAULT,
7 t! K) x& m6 d7 R                DISPATCH_METHOD,
# y8 E7 d# V5 b  q                &dp,+ R. K. W! R& b* F9 g0 l
                NULL,
! ~- `) s" f/ w. v2 ~9 n                &ei," T8 _& m( o1 j/ O. @5 c; S/ p
                &uiErr);
4 |2 `% d4 X1 m) h
$ f4 Z) G2 q" G2 K7 f8 d" N' D! F0 M$ d        SysFreeString(topicStr);
, N4 {2 s* q# M1 k+ W! O4 U        SysFreeString(itemStr);7 C* O  C; i3 q& m( p* {7 a7 i
        SysFreeString(valueStr);" X& G5 T3 R9 x: H* [2 C  C6 f2 k
, z- ~0 A; O" ]% H$ b8 n7 H: r
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???! Y" O) q. I+ b* u" z/ D7 t/ Y
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
& P8 P& h2 M# i' B' F2 n' P; V. @7 v  ^- r

3 g3 g4 n( a( X! t2.这是request的程序4 X, ~8 L; _+ T0 S7 M
//  Request a value from Extend& ?4 P* V7 j' M
//% P0 k' x: a: R" Y7 Y* W
//        Initialize the variant that will hold the BSTR.  Set the variant's) G; Y  N; N* i- O( b. }4 P
//        type flag to indicate the fact that this variant holds a BSTR. Place the
' D9 P- m' Y5 O) A//        BSTR into the variant structure." \# S$ `% h# g2 L

+ t0 n. M* _8 |/ |. c; y8 @- l        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);7 ^% F" Y. o& @
        / R* X0 `$ N3 z7 K; Q7 s
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");) }4 |  R  j+ l& U
        VariantInit(&requestVariant[0]); 7 z  W: M! m1 {9 |: ^$ G' ?$ {
        requestVariant[0].vt                 = VT_BSTR;* q  t! {3 e2 E& [+ n- q1 G, M
        requestVariant[0].bstrVal         = itemStr;
8 C8 B, `# ]% L* \4 [4 I0 D, k1 g5 k. l+ d
          topicStr                                         = SysAllocString((WCHAR *) L"system");, I- F' ^& H3 l6 @
        VariantInit(&requestVariant[1]);
3 ?. Z3 ]! g0 o' w3 Q: a$ {% [! ~        requestVariant[1].vt                 = VT_BSTR;
' o/ y  [4 Q; t( W5 q        requestVariant[1].bstrVal         = topicStr;0 N: S" H( y# M4 F3 g( t" T4 i* d# F
8 j0 \3 U; K5 L, t: \
//        Set the DISPPARAMS structure that holds the variant.3 V! j& k: k$ h) ~* T
/ ]& ]* m9 y0 H: m
        dp2.rgvarg                                         = requestVariant;. t& [) j7 I- B' v; _% ]+ z
        dp2.cArgs                                         = 2;4 t/ l: v1 N7 j" p
        dp2.rgdispidNamedArgs                 = NULL;# s2 W- s# v# [" ~0 v/ h9 i* N
        dp2.cNamedArgs                                 = 0;
3 T. d3 O1 y" t5 _
  _3 ~, G6 F8 f# c4 L# f         var.vt = VT_EMPTY;
* m- j' m7 v, Q" h6 V8 ~2 q8 |% e
' W  N8 U8 E& u1 w6 Y7 R6 E//        Call IDispatch::Invoke()2 V" v8 p$ `& n0 P- N

8 X& G, r" J0 k5 X* {) ^6 V        hr = m_pDisp->Invoke(
# w: u4 _! ]; _9 W! Z; b# Q/ P                requestID,
; |8 s* g: R  b8 _: Q0 M0 e" s                IID_NULL,, I6 Y4 z1 l6 O$ |
                LOCALE_SYSTEM_DEFAULT,, Y; Z  [$ l* ~- Y& K" ?! H
                DISPATCH_METHOD,
  k/ v  U* z$ V" e4 {( M! I. z$ M                &dp2,% X. d  r, G' E' \( f# I
                &var,
% B3 g. O7 Y% E3 O& ?( [3 o) t6 g; E                &ei,
% q$ V% N/ N" |7 Q6 Y+ D                &uiErr);
& s5 U# c0 Z0 w% m9 ~# p
) L! ^1 {+ F0 C2 z- u6 U3 a9 ~        SysFreeString(topicStr);. d$ ~! j7 g) P9 `/ k# M
        SysFreeString(itemStr);" l2 \# q$ N* h8 s1 y6 r
请问该程序是获得extend里面的哪个值?
1 l5 Q2 \. r  ?$ Y如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-3-13 13:09 , Processed in 0.016954 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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