设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8277|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
# e0 B0 C& f. O& x, mName = (WCHAR *) L"Poke";" {, n9 @2 A- U  O( E
                
; a/ S. q9 R. k; u        hr = m_pDisp->GetIDsOfNames (
/ T: ?& I$ ~# ^# u* W* C                IID_NULL,                                // reserved
$ G+ B/ M- r. z                &Name,                                        // Array of names to get IDs for
# l9 Q: F' q% v, L1 Y' H                1,                                        // # of names in the array
3 Z0 |' T( F; `7 i( ^8 g7 p# ]- g                LOCALE_SYSTEM_DEFAULT,        // System locale( k5 n% k, d$ n0 l; O+ Z% _
                &pokeID);                                // Array of IDs to fill on output
+ O: M  Q- h0 Q( Z- z' C. C                        , ^1 i9 R8 C5 ]+ t1 Q  a2 x
        if (hr)# n1 `/ Q( W; \0 c) t8 l
                {
& Z1 _  ?: m: h. C$ C' v. x1 p: L                MessageBox ("Get Poke Unsuccessful");
* r! \" Q2 C3 `2 q4 q                return;
/ e- r$ r- A. x- k! H  {                }. b0 A  t# f: t( q+ R

4 C$ j9 s. E3 |3 Z0 d) L/**************************传递数据给extend**************************************/
% R# x# F. @$ W5 J        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
. H/ g3 L0 @7 u+ ]7 t        + I5 T& G( {1 l2 n: O2 u
        valueStr                                 = SysAllocString((WCHAR *) L"1232");, [2 v; Q, D" c
        VariantInit(&pokeVariant[0]); # w" \$ v/ |& i1 b+ X* t
        pokeVariant[0].vt                 = VT_BSTR;. y! v! G3 A' F* s
        pokeVariant[0].bstrVal         = valueStr;3 l. X% y, ^/ B  L3 u$ [, x

6 m  h2 n1 ^$ W8 K) _$ |& _         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
1 n7 V% B2 @; @- h! w6 S        VariantInit(&pokeVariant[1]); # Z: g' I1 d% I* r9 D
        pokeVariant[1].vt                 = VT_BSTR;, c4 K' j& s0 `* H5 C
        pokeVariant[1].bstrVal         = itemStr;) z7 ~5 [4 M/ m
. |3 o( Y4 [# Z1 E
          topicStr                                 = SysAllocString((WCHAR *) L"system");
6 O5 c3 L2 `8 M" I% y7 j+ d        VariantInit(&pokeVariant[2]);
& l7 e. d2 @) g! m        pokeVariant[2].vt                 = VT_BSTR;
8 o- q$ |9 L) o+ |, y        pokeVariant[2].bstrVal         = topicStr;
5 a6 `: G! M# b: D
6 C" l& d4 T9 b1 P( y' U# d% i0 d//        Set the DISPPARAMS structure that holds the variant.
# r( G" B  O, U) K+ r% |  @2 i! U! T! I' Y
        dp.rgvarg                                         = pokeVariant;
/ z. T8 L2 F6 p: g! A, D        dp.cArgs                                         = 3;
( A5 }' E0 C1 ]( j  }; \; f. R7 ^        dp.rgdispidNamedArgs                 = NULL;
) U9 J( y# W; s; U8 ?        dp.cNamedArgs                                 = 0;
" p* s+ }9 S: O9 U- G9 o$ S3 A7 q0 D# @; i8 [. d0 L" W
//        Call IDispatch::Invoke()
1 O- G8 ~% n3 g* z1 p# A2 B% W9 d: z  D8 [: s; x
        hr = m_pDisp->Invoke(
9 t. S$ g: B/ m9 ~4 w                pokeID,/ l. W2 R$ `: l/ G' A% V
                IID_NULL,
! K' N$ E; s( W& _  u9 M- L: o                LOCALE_SYSTEM_DEFAULT,
0 _6 [2 g3 n' {: d8 o                DISPATCH_METHOD,7 O( V  K5 w- ^3 N* E5 F* s+ T
                &dp,, x' ?& q9 U* |
                NULL,
& o+ f8 r2 _7 \9 b3 L2 \" {: Y                &ei,
7 M9 w) _: f! G( w0 l                &uiErr);
( w; |  }1 @  K  A& Q2 A; r0 _* P
5 w8 D9 q0 o" @        SysFreeString(topicStr);
* c; v4 ?, t0 t& X, k) q) X1 v! `+ j. E        SysFreeString(itemStr);
8 d3 U! i# i. _2 N/ q3 U/ q6 ?        SysFreeString(valueStr);/ A) i9 `9 f  _3 o; f* z* T

6 K, |& J' D% H6 V" i现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
' @; r! m% ]- W此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
% N  h: Q" }$ N% @' o
# M' ]2 I- A: x6 A9 o% e
# O- a2 z: q* ~+ z0 s' a2.这是request的程序
1 \9 s9 F! c6 I( M//  Request a value from Extend
) j4 v' t5 e! s: Z: a//! ?; G  r. ?4 a( f
//        Initialize the variant that will hold the BSTR.  Set the variant's
7 Y# N' Q0 P3 n# L1 J) `//        type flag to indicate the fact that this variant holds a BSTR. Place the6 m$ N; T* \: `
//        BSTR into the variant structure.
" n  e! K/ h+ d) x9 Z" E) \, t' |5 q$ m1 c
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);* {2 B1 e7 c2 O  q0 N0 j% P- O6 b
        # V/ W! X( U7 d4 n6 N
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");( J' `% S1 g# Q3 X
        VariantInit(&requestVariant[0]);
2 s1 w& G& G5 L( S        requestVariant[0].vt                 = VT_BSTR;9 `5 b9 a3 n/ |8 ^
        requestVariant[0].bstrVal         = itemStr;% x( P3 @+ _% g3 f

! N3 @- \0 S- I          topicStr                                         = SysAllocString((WCHAR *) L"system");
: u5 a1 k7 [! w        VariantInit(&requestVariant[1]);
" y9 M& x: t. {$ v, ]% o* E; [        requestVariant[1].vt                 = VT_BSTR;
/ w, O  A9 M9 i2 ~- l$ X' u" l        requestVariant[1].bstrVal         = topicStr;, t7 B* r1 u: s
+ a/ i6 G7 r# J  ]% U1 ]$ V
//        Set the DISPPARAMS structure that holds the variant.* i4 X0 D5 i8 x. [

& m/ E" K9 t' d* t1 f        dp2.rgvarg                                         = requestVariant;
0 _; e# N! ?& x: Z# b2 |( f        dp2.cArgs                                         = 2;
0 _+ v' h+ i2 K        dp2.rgdispidNamedArgs                 = NULL;
: p+ \) b4 H. k) i        dp2.cNamedArgs                                 = 0;
# p4 N4 j2 U( @" I% S1 Z5 {. Y- d6 T# `/ Y
        var.vt = VT_EMPTY;
! X, V; A# a( X- b3 \
% i* G/ H5 {/ v5 r$ q: i; x//        Call IDispatch::Invoke()
+ D* I- h* g& D2 h& l& o8 H7 {& ~0 O8 r: ~
        hr = m_pDisp->Invoke(
" ]1 q, e$ `) o. H: Q: `                requestID,
6 u; a3 B* m2 R* ?# y/ y* G5 K                IID_NULL,. u6 Z9 X! l) w) c) i% \
                LOCALE_SYSTEM_DEFAULT,2 Y, R! z9 I8 c/ z. x
                DISPATCH_METHOD,8 b/ W' k- ^& J& Z# A  j
                &dp2,1 S  O( U) A' W( }: R
                &var,
: P5 b0 {) s- {- z- N/ G% P- s                &ei,
5 ?, I1 C$ N, n8 k( z                &uiErr);$ K: E  |$ d2 c( S, j
9 g2 Q; r7 J: b/ f
        SysFreeString(topicStr);) l- p% [) M' y1 s9 k
        SysFreeString(itemStr);
4 H+ P$ J, x; O: \: \) {" f请问该程序是获得extend里面的哪个值?
$ N8 n3 |% [- _1 j0 j如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-2-22 04:32 , Processed in 0.014648 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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