设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7674|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:8 v: N. D" H, V) D
Name = (WCHAR *) L"Poke";* Y% o$ E3 B) A2 `; P
                
# I1 y: [, I: M7 ^# |7 H. X        hr = m_pDisp->GetIDsOfNames ($ p2 Z* x% n( P3 o+ x
                IID_NULL,                                // reserved( v( r9 i( S. @! U
                &Name,                                        // Array of names to get IDs for
. I# n! `$ M% b                1,                                        // # of names in the array( N5 a1 _& o: F
                LOCALE_SYSTEM_DEFAULT,        // System locale
. o4 d2 Q1 K  K# k+ u  S0 s$ R                &pokeID);                                // Array of IDs to fill on output
; [, [# ?$ W" i) j" y                       
3 g/ }; v7 I/ I8 b        if (hr)
1 w: M# H4 Y: Z' f; E$ D& v$ l                {' I* E1 I+ ~5 b  n: y; f  \
                MessageBox ("Get Poke Unsuccessful");
" R; W9 a3 H# @; d                return;
* d, B1 [6 P& R9 K: q( @- b                }. U" N( v3 ?8 n$ ]
* y( B( e: m7 h$ C/ Q- H
/**************************传递数据给extend**************************************/  F& Q0 ?4 p/ o
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);- h0 l. u1 J, o5 ?- B5 T! A8 h6 h
        ' w; F0 L1 ~5 |2 g; {
        valueStr                                 = SysAllocString((WCHAR *) L"1232");$ v6 n% v0 ^0 e7 k: ]
        VariantInit(&pokeVariant[0]);
* _) O( t: O  l  w. o9 C        pokeVariant[0].vt                 = VT_BSTR;8 h0 X! Y8 {. C7 p! B
        pokeVariant[0].bstrVal         = valueStr;
, l6 @) D: T' u$ S5 e
7 F2 _) |0 [. E% |         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
0 B0 l. `4 P$ D' Q+ W1 v        VariantInit(&pokeVariant[1]); % A4 f6 r5 r; F' H4 p# H
        pokeVariant[1].vt                 = VT_BSTR;3 ~4 P8 O" I, p! a* V! E
        pokeVariant[1].bstrVal         = itemStr;2 k! k: ^# ~* T8 t$ m/ l

- l; {1 @: M, |) `# t          topicStr                                 = SysAllocString((WCHAR *) L"system");4 W$ ?5 k) b* N" D- R6 Q  Q8 W
        VariantInit(&pokeVariant[2]); 8 {4 C% u: @, h  D: ^+ X
        pokeVariant[2].vt                 = VT_BSTR;
% ]- ]! Q9 [  ^8 ~7 L        pokeVariant[2].bstrVal         = topicStr;3 T- T  ]& W  o4 `
% D) `+ D6 X- L1 U5 u! d2 S6 ^7 r
//        Set the DISPPARAMS structure that holds the variant.
9 M" P8 W* E' h, m, `. g: a7 u3 H* c* g( K& ^( y5 P* E
        dp.rgvarg                                         = pokeVariant;. }$ @- B7 M- K7 R6 A- L: ~
        dp.cArgs                                         = 3;
) ~8 v- ^1 U, o7 c, ~        dp.rgdispidNamedArgs                 = NULL;
& j$ Q% X' L# d7 t1 D$ j& Z" U        dp.cNamedArgs                                 = 0;
4 i; X0 \. r3 e& |" `" K
/ D; w) _$ E/ |& z//        Call IDispatch::Invoke()3 D4 b/ F! h% v5 C0 U: {' Z

4 L% D3 m0 Z( r# W        hr = m_pDisp->Invoke(1 [4 x6 m$ b* F) S, ]
                pokeID,
6 s0 c9 d; o5 _; e! z3 q. s                IID_NULL,- b  {9 o5 k9 Z* c9 j; ]" e: |* z' l
                LOCALE_SYSTEM_DEFAULT,' W9 P+ W, _1 }
                DISPATCH_METHOD,/ E, o! R0 h0 ^" L+ m; S
                &dp,8 l: w. B6 P9 [- c) [
                NULL,% d% k- _2 M* x7 w8 j
                &ei,9 ~( s/ S; M4 @) X0 t5 b" j
                &uiErr);# a- {2 z1 X  ?) K, d
2 V/ J5 r/ c* u) k/ G
        SysFreeString(topicStr);& S4 [( f! i7 s3 s- V1 I( ^6 B
        SysFreeString(itemStr);; s& ~0 L2 A2 i3 q4 n' D9 [) Z. y
        SysFreeString(valueStr);, g4 |% W! N# V

, h& b: v* @8 p4 l0 N现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
% h/ J. H# Q9 y* U此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
0 \( p; m9 s, E" x# c; C( P9 g  Y- y, a
* d6 S" d. ~/ E$ n3 |+ f5 E# A: q
2.这是request的程序
/ u9 R3 K/ W5 o2 j/ u  \//  Request a value from Extend
# c! `! Y1 f2 n//
- {1 n5 E$ ?0 X- w//        Initialize the variant that will hold the BSTR.  Set the variant's5 A5 U2 \. z1 w2 f6 k; d1 n9 X
//        type flag to indicate the fact that this variant holds a BSTR. Place the/ b8 @' D8 ?+ a# G7 l5 }
//        BSTR into the variant structure.
4 J$ l/ Y/ ^  Q3 m2 y: j
, c% h* T0 u& R# |        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
4 P$ F5 H' s/ [% x! {& a       
" }% L9 K7 m' T8 H         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
! R, Q) X. I; _$ q- l        VariantInit(&requestVariant[0]);
: \, N6 q' e" _: a        requestVariant[0].vt                 = VT_BSTR;4 b2 r& b3 n9 k' q4 G8 Y0 J! I
        requestVariant[0].bstrVal         = itemStr;' J; Y! i/ ]. q- g9 o# h

" E2 t/ ?7 o" y4 \! G          topicStr                                         = SysAllocString((WCHAR *) L"system");
5 J+ Z! \/ V8 E; r        VariantInit(&requestVariant[1]); 1 `3 |; J  Z4 _% ^/ _% G2 L' M; o- Q$ V
        requestVariant[1].vt                 = VT_BSTR;
; x% K/ }/ B& `# r; v+ U3 \$ n        requestVariant[1].bstrVal         = topicStr;
3 l: ~- N% p2 J7 `6 |  s8 d* }: `
//        Set the DISPPARAMS structure that holds the variant.$ i, c7 A: V5 _3 D
' A1 w" J# X) V" m3 X( Y+ K& t9 _
        dp2.rgvarg                                         = requestVariant;
: |- v' j9 g) H0 W+ M        dp2.cArgs                                         = 2;! p( f# D" g5 U% W& c% o
        dp2.rgdispidNamedArgs                 = NULL;
7 ?5 M) E% l8 d0 S! J        dp2.cNamedArgs                                 = 0;
- e, i8 s; B: H8 r; X) }5 g
' @9 O6 D& ]* O         var.vt = VT_EMPTY;
  C- z2 p8 B- ]. {0 H
* {0 O, Z( q- k& \  N8 L1 l//        Call IDispatch::Invoke()  \: R8 C  M; O0 ^0 o2 i& }

2 `( F% m7 b0 \6 v# D. `4 c        hr = m_pDisp->Invoke(' w- g5 z1 m0 ^5 ?! _4 Q7 y0 ~
                requestID,
0 T7 Y& Q5 {, p& l/ o                IID_NULL,
5 f: `9 H) {' V9 \' a5 G                LOCALE_SYSTEM_DEFAULT," X1 o5 c$ ^; E* E
                DISPATCH_METHOD,
2 R! ]" c' r4 Q6 t2 j, X8 x5 o                &dp2,2 f/ X/ |: o: b" G
                &var,
- s" \8 r4 z5 d# t0 Q' `( }                &ei,4 U. C5 ?- t# U6 Y
                &uiErr);- F/ l0 W) }0 {+ e# j
( a6 ]/ r" r! V7 @2 B6 x
        SysFreeString(topicStr);
. X; v" d. R% j; e+ q4 s9 }1 N        SysFreeString(itemStr);( N$ f( |! p9 r5 A
请问该程序是获得extend里面的哪个值?5 n1 M5 q1 C& x( I3 r& w% ^
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-1-29 02:10 , Processed in 0.020225 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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