设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9379|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
# _# g6 x5 c5 q) {& S6 WName = (WCHAR *) L"Poke";
' H9 l" f( t  J( ^0 x                 0 R# t% D9 Z" G
        hr = m_pDisp->GetIDsOfNames (
! y0 p# _+ x7 g) Y                IID_NULL,                                // reserved
: S4 s* X/ [! P1 H, b4 n3 l                &Name,                                        // Array of names to get IDs for; U% p" X3 k- S: n5 \4 I
                1,                                        // # of names in the array" m$ P" ]. P) f/ _3 \
                LOCALE_SYSTEM_DEFAULT,        // System locale
# B5 x$ J5 ^6 o" O9 S+ K                &pokeID);                                // Array of IDs to fill on output4 J4 Y: p2 N+ N8 {! k+ f
                       
, Y2 S9 j6 a6 u" U7 t8 U/ P$ I        if (hr)5 |( w' `. a% u; W% s, I0 `
                {# S! y, J* f) c0 e7 _& P
                MessageBox ("Get Poke Unsuccessful");
+ f. M) A1 \. j: @) b                return;
) z. z: [" L% |                }# H3 }/ |7 ]2 L  y3 X6 U

8 _7 `7 o2 @$ }/**************************传递数据给extend**************************************/: l- l7 Y; W+ c$ V; B4 p
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
7 K6 q$ Q/ B% ^' _5 z6 I        5 h% t9 y* {$ g& O' d3 [' D6 E% h
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
6 N! o8 a  k/ |& y7 [; e& B  K5 m        VariantInit(&pokeVariant[0]);
$ v& z3 A2 g/ a- m$ `        pokeVariant[0].vt                 = VT_BSTR;3 `+ i8 N4 T& j3 b5 a1 i
        pokeVariant[0].bstrVal         = valueStr;# J$ |; q, s" i( ^& a

9 P$ M+ ?, }2 S& \4 X8 W" l         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");! O- i1 R: h- P" |6 b5 q8 T
        VariantInit(&pokeVariant[1]); " u3 P5 y5 A  m' K+ q% f) |
        pokeVariant[1].vt                 = VT_BSTR;/ X9 e4 y2 `  z) A6 b( B: W% |
        pokeVariant[1].bstrVal         = itemStr;0 G( s# i5 x4 m7 V. ^: K. h

! d1 F) o* _% x5 M$ j! {          topicStr                                 = SysAllocString((WCHAR *) L"system");
: w; e) P1 S, i4 [9 T        VariantInit(&pokeVariant[2]);
3 n' Y8 Y7 D% ]. G        pokeVariant[2].vt                 = VT_BSTR;
  V) {# k3 `9 k; ]$ A  l; F0 M        pokeVariant[2].bstrVal         = topicStr;
* o8 j/ O" U5 [" e4 d% s
5 T6 \0 E3 @8 m8 K" Z//        Set the DISPPARAMS structure that holds the variant.. @$ {4 [' i4 b3 f* X" ^

9 J& Q) z- d( F* t. L6 Z& ~; }" t        dp.rgvarg                                         = pokeVariant;
7 I8 C! j- |! \! C) `& @        dp.cArgs                                         = 3;6 J) y0 Q3 V. u& ~* @6 y
        dp.rgdispidNamedArgs                 = NULL;
( L! y$ `% Z( S1 w5 o        dp.cNamedArgs                                 = 0;& }1 v  J1 _9 U, B
5 v" o2 a, q7 q# N4 m0 D! ~) k4 }
//        Call IDispatch::Invoke()) O) \8 _0 [2 |7 b0 R3 ^  D
, f# w' \0 h1 `
        hr = m_pDisp->Invoke() ~5 }7 m7 u( s& R
                pokeID,
3 s* e. G. `4 S! V0 J9 d/ Y                IID_NULL,! M! G1 Q1 K: Q5 N
                LOCALE_SYSTEM_DEFAULT,. U' H' B2 V, [: J4 n5 ]3 a
                DISPATCH_METHOD,9 b! h* ]8 d1 l/ Z) t
                &dp,# d0 k8 |4 c3 o. d7 [9 N
                NULL,9 S+ s9 T. l! y( p: c
                &ei,
& J+ v; Z0 w  N1 E. H                &uiErr);: E' k& M$ A& K
; j/ q- o, W5 m0 Z8 {
        SysFreeString(topicStr);
& o6 g5 M9 ~, j- l& Y+ U4 Z' v        SysFreeString(itemStr);
6 [  H" ]4 Y- H9 ?  x        SysFreeString(valueStr);. Q( r" _6 M% N3 G) ^
5 p9 t4 b( n+ [4 ]* ?* C7 Q( I, D+ b
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
( |! i( w8 T% @此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????4 I) H" Q  W" `: e. {, m
% G. t: J- K8 O7 y

3 I: n  C: T+ @: r& M9 R6 }7 f5 _( M2.这是request的程序/ C" j& |3 E: V3 a$ e" H2 w- J1 \6 f
//  Request a value from Extend1 t! `. K6 c3 G4 I2 W* E1 z, Y
//
) ~4 d% t* ]* \3 C* |; l3 Y//        Initialize the variant that will hold the BSTR.  Set the variant's/ u! Q9 N6 Q, q' @% [: s
//        type flag to indicate the fact that this variant holds a BSTR. Place the! q0 d( G# n$ C6 w8 e$ i
//        BSTR into the variant structure.
, Q% a; n! j% ~2 I; ]8 Y, [  i' `5 j1 t8 Y, @  h* Q, i
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
; A' |1 F1 X. u) g8 g8 z+ D        ' c( I6 j/ C3 P! ?9 W
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
! h: w- Q1 k1 D& @. x+ o# L        VariantInit(&requestVariant[0]);
. b: X4 F1 m7 b! S9 M+ o2 ~. x        requestVariant[0].vt                 = VT_BSTR;4 c$ Y: k6 j7 J6 x$ S% `
        requestVariant[0].bstrVal         = itemStr;
% A! r8 Z% |( v0 ~! u, J" L7 u* }6 S" D
          topicStr                                         = SysAllocString((WCHAR *) L"system");
# V# r. H1 W& ~, \" A0 ?- x        VariantInit(&requestVariant[1]);
) X' \+ H4 J6 l' x7 q/ _1 E        requestVariant[1].vt                 = VT_BSTR;
* ~. T# y: `7 H" L        requestVariant[1].bstrVal         = topicStr;3 k: i1 Y, `* {% ~

7 R* A1 j5 K# Q4 `' @4 \$ r//        Set the DISPPARAMS structure that holds the variant.; A% P( X2 b4 Z" \+ ^

2 @3 D! P- p6 b" W) j6 r& v        dp2.rgvarg                                         = requestVariant;
4 Z8 h! C* p3 C! X        dp2.cArgs                                         = 2;
" N$ o3 I  X8 f$ ^- V, x        dp2.rgdispidNamedArgs                 = NULL;: ?) O& }6 s9 N8 A3 F3 E3 t
        dp2.cNamedArgs                                 = 0;
" J/ }2 j8 w) N$ a2 ]# |, N5 g, n, u' W5 j0 \* R& {2 L. O
        var.vt = VT_EMPTY;8 N8 X; X4 y" _

) |) F5 s6 B$ F; J//        Call IDispatch::Invoke()9 d+ s! g3 ?4 o

8 j0 a! Y% P$ ~+ j        hr = m_pDisp->Invoke(
1 C3 E; v5 J) I                requestID,1 `& m6 Z# o8 y3 \
                IID_NULL,$ t# A5 ?0 r+ _' T2 p* Q
                LOCALE_SYSTEM_DEFAULT,
  t8 |4 O+ z6 E# X                DISPATCH_METHOD,
2 ~8 S8 n+ T& g* A" v                &dp2,
% e+ b, a8 X$ x7 I5 u- ~2 \                &var,( B+ i6 M" E4 ^$ T: U, N' l
                &ei,
% f% m2 E6 L7 z7 H5 Y                &uiErr);
# X% o- I4 R  C) \3 i6 R- n" A5 {# b; l
        SysFreeString(topicStr);
& b7 M$ Q# \0 U) @8 a        SysFreeString(itemStr);
" O' y8 _# W$ [& w' B& ^请问该程序是获得extend里面的哪个值?
' [7 T+ T  l* T- C8 m$ I如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-4-16 03:46 , Processed in 0.016958 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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