设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7776|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:9 u% P6 ^4 p, P( t3 H7 `& n3 k0 ]
Name = (WCHAR *) L"Poke";
3 A1 c& t+ n& V$ u9 N; `" t; O                
5 b7 g3 H9 n, I% t        hr = m_pDisp->GetIDsOfNames (7 [; ?" L: r; b1 }  \+ O0 n
                IID_NULL,                                // reserved# O8 q+ N% g8 c2 W
                &Name,                                        // Array of names to get IDs for6 q  j" t4 |8 }) V" ^# {( {
                1,                                        // # of names in the array
1 M% R1 C$ |- U  S                LOCALE_SYSTEM_DEFAULT,        // System locale
/ g! W+ n7 u4 @4 R                &pokeID);                                // Array of IDs to fill on output8 M# \& s- h" [( D; @
                        - Y# C$ P: ^8 P# F. B9 k
        if (hr)
- B( A; @1 R4 h6 }" L/ X8 D& N                {9 ?0 \9 @& _6 T9 {! f
                MessageBox ("Get Poke Unsuccessful");
' {4 w2 o" u# J                return;$ N$ l+ c/ k- L4 c: H$ O: x
                }  s" l3 R2 |* ]* n9 E+ A5 N

8 F8 L. F! g- U3 b7 _- H/**************************传递数据给extend**************************************/
" j! j+ P* @+ U! v/ O        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);5 G+ p  ~" Y% @7 |6 \
        " B) W5 P; c$ y4 a0 X7 e9 M: P
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
: v* W; {. L" J: X7 S8 {, t5 N        VariantInit(&pokeVariant[0]); 4 e0 d. j$ q, E: O+ p+ ~( k3 \
        pokeVariant[0].vt                 = VT_BSTR;
2 O0 H2 ?* S2 u, x        pokeVariant[0].bstrVal         = valueStr;6 v, a! \1 i$ {7 |* i. i
& g4 h$ f; i& `. V6 J6 i! Q; s
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
/ e4 ^5 |+ O% l% y# }        VariantInit(&pokeVariant[1]); + N, {. y9 C# V# e  Q
        pokeVariant[1].vt                 = VT_BSTR;$ T) a4 g0 F; N0 ~+ E
        pokeVariant[1].bstrVal         = itemStr;
* k' t1 \- f3 \; n
/ r( }" U/ P) A+ E7 E, Q          topicStr                                 = SysAllocString((WCHAR *) L"system");* K2 a; r' C& N. o; U+ V8 f
        VariantInit(&pokeVariant[2]);
/ h' v2 Y5 ?, g/ L2 c0 K7 b5 K        pokeVariant[2].vt                 = VT_BSTR;
, O  _9 U" {! q) Z3 R1 J, g        pokeVariant[2].bstrVal         = topicStr;1 K  w1 \4 ~. m! k8 p( k# C( H
; {$ A1 _0 U8 V0 ~& N9 }
//        Set the DISPPARAMS structure that holds the variant.0 K, \+ g* ?% @; X3 _0 ~

" t0 R: [+ c# w        dp.rgvarg                                         = pokeVariant;8 B: U' `8 h6 @
        dp.cArgs                                         = 3;
8 i9 }) i, Q5 ~" h: w7 C& D* k* u        dp.rgdispidNamedArgs                 = NULL;
/ q3 C; i' t9 ~: f5 T) f% M        dp.cNamedArgs                                 = 0;
5 `( l$ E! w4 \+ l% o1 G$ E7 A- p8 B2 s. n6 m% r( }
//        Call IDispatch::Invoke()% q7 E; ~  `1 q* [3 H

6 x9 \2 g( V. c) e        hr = m_pDisp->Invoke(
0 E& j  V3 Q0 g( z4 ^& X                pokeID,
- m# _9 Q$ L  Q                IID_NULL,
! Z3 |0 c3 f" P$ S0 k  m                LOCALE_SYSTEM_DEFAULT,
9 D$ `+ j3 V, M5 {' D                DISPATCH_METHOD,
! [! Q9 n% {6 A. ~# O+ X                &dp,
  |2 b6 c- {, `                NULL,
9 `, `7 m9 Y# c* j: O% x                &ei,
" V) X) S) `' z; p; I3 W                &uiErr);' U% x. k, {; I5 O0 N6 u
7 S: t( h! `3 B& P* y5 j( L
        SysFreeString(topicStr);+ G8 N% u7 F  |4 c0 C
        SysFreeString(itemStr);
# a+ u) c$ F/ c: }( t& e        SysFreeString(valueStr);
5 P  \" l% W/ }0 m4 v7 ~* p  e( g! f& X
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???) o# t, j, ~' d! J
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????" X% x3 ~$ K8 [0 |
* m; u2 n7 Z, ~; ~2 U* z6 e

3 z9 ^  N4 d3 B0 o. U- a2.这是request的程序
8 U& O3 @7 I* F6 l& I//  Request a value from Extend
* f! p5 `' v( M//
" M& X  z! [3 {! V; z# p: y/ ?  h//        Initialize the variant that will hold the BSTR.  Set the variant's
* U, z; _7 ?/ m6 v' ~* p//        type flag to indicate the fact that this variant holds a BSTR. Place the
8 u( y4 j  `7 O# G& c//        BSTR into the variant structure.
" w4 k% L  }, ?3 W  F. ~6 b
" k5 X9 [% _* Z  Y# ^# ~/ U        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
1 L  \) j. b/ T; L! G        5 @% h/ _# f+ T) v: b4 v6 W" v
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");' V4 H+ V2 y+ ^8 b  P
        VariantInit(&requestVariant[0]); , j$ J7 L1 D* `
        requestVariant[0].vt                 = VT_BSTR;
  J! S* t4 U5 @& X. h- Z9 g        requestVariant[0].bstrVal         = itemStr;+ {8 x# e- L  a& \- c0 E

, Z" o& ?6 N/ a          topicStr                                         = SysAllocString((WCHAR *) L"system");
6 t9 Q/ C/ B8 c( S3 y) p        VariantInit(&requestVariant[1]);
& j+ v2 e( P  B( v% M        requestVariant[1].vt                 = VT_BSTR;/ }( ~/ C& a8 c
        requestVariant[1].bstrVal         = topicStr;+ k" F2 T3 D9 s1 o
) j( f& [1 f, p$ O# [
//        Set the DISPPARAMS structure that holds the variant.
' [) [' g& ?. ]5 {/ v$ T$ l$ T8 e+ z+ `/ X
        dp2.rgvarg                                         = requestVariant;4 C! P: i6 ]8 ^' \1 r7 D1 {9 \
        dp2.cArgs                                         = 2;5 x, L* t! R8 m: `& b8 L/ M
        dp2.rgdispidNamedArgs                 = NULL;: U9 s; p% T) t7 x3 N
        dp2.cNamedArgs                                 = 0;% j/ ^9 s+ `! P6 ~
! F+ u6 @  Q/ l' h5 b. X
        var.vt = VT_EMPTY;
4 b9 |1 T# ^) K, V: F+ w4 l% m% X) N# L/ \- a4 j" W# C
//        Call IDispatch::Invoke()
& K8 z4 R$ Z& `2 b
4 d0 x) U5 {& R9 n$ a        hr = m_pDisp->Invoke(- z2 U6 x9 k3 O1 Z' P  f$ u3 @1 A
                requestID,
: ]2 S) @% E3 R9 I% F' `                IID_NULL,' q( i3 |, E2 Q& n" i) a) \! p0 q
                LOCALE_SYSTEM_DEFAULT,3 [2 ^) s) r& l+ k* ~
                DISPATCH_METHOD,: v  B  V* t, D9 b7 J9 E2 S6 }
                &dp2,4 x6 E& L7 V6 C( @  t
                &var,
$ J5 }) N  g; O; O' C5 n3 Q                &ei,: R3 `4 E" X( K5 X
                &uiErr);
: l& C* [/ f* k8 o, J6 X3 [. ~  \
( {, B, u5 r* ?3 m1 M        SysFreeString(topicStr);3 J' V+ A3 l9 l3 u( d
        SysFreeString(itemStr);
2 b! q4 n2 Z3 ~5 g) Q/ z请问该程序是获得extend里面的哪个值?
+ W$ b1 v% M, z5 h" d& y9 T如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-2-2 08:58 , Processed in 0.018535 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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