设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9851|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
% s6 z, i( G; B" A" UName = (WCHAR *) L"Poke";
- B' _" B4 |! q* i. E: F                
$ C; F1 C4 C; S- i        hr = m_pDisp->GetIDsOfNames (
$ s0 T# }0 H# a! V0 `, Y0 n                IID_NULL,                                // reserved
* d2 t' ~2 s8 v; F' u7 p. W% d                &Name,                                        // Array of names to get IDs for" [& D3 A8 r0 u3 ]3 {+ R
                1,                                        // # of names in the array
3 t1 c4 X( y; v' c$ |* U/ I0 Z                LOCALE_SYSTEM_DEFAULT,        // System locale/ V0 }- ]1 x' o8 V5 P7 R
                &pokeID);                                // Array of IDs to fill on output
3 ?, ?5 S: Z0 [- M$ V; \# [                       
9 i( J: k: g$ M- @        if (hr)9 g; r1 \  D) _- L
                {- n: V' O* }2 c8 k- u
                MessageBox ("Get Poke Unsuccessful");/ X# a' U( E2 P
                return;) D  t9 R7 u' w# X; s; G' l
                }0 h, v5 N2 Z  C% o5 _6 S$ c7 |7 N
# M- \# n" ?1 W) j
/**************************传递数据给extend**************************************/
8 e4 g( y. L! s/ ~# O  N# ^9 N5 W        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
- y0 t4 ]+ m8 D; P* w4 H9 G, X        , [* e# }6 z8 q3 T
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
/ z$ l" v* V# l' w  |/ j/ n! O        VariantInit(&pokeVariant[0]);
1 V% A. }; I# A        pokeVariant[0].vt                 = VT_BSTR;6 n" @+ [8 [; g5 J: {( e
        pokeVariant[0].bstrVal         = valueStr;
0 H0 J9 E3 Q! U; w9 j: d/ c7 O" Y4 H
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");, J7 }/ _* s, ~, ]( O. f
        VariantInit(&pokeVariant[1]); 9 ]# y" C0 Q4 J. {% V
        pokeVariant[1].vt                 = VT_BSTR;
, {1 c4 K3 s! @  M& w1 n4 f        pokeVariant[1].bstrVal         = itemStr;' B: s/ l7 m3 Q6 D4 o* X
6 B( o: i* [9 K  c
          topicStr                                 = SysAllocString((WCHAR *) L"system");( U" V. u# v$ h5 w) Q/ B
        VariantInit(&pokeVariant[2]);
3 s. B3 ^2 B$ L) |        pokeVariant[2].vt                 = VT_BSTR;+ s1 \* I+ O2 _
        pokeVariant[2].bstrVal         = topicStr;! }' X& C- P& m, _7 b
# c& H) B# @. C7 g  }; ?
//        Set the DISPPARAMS structure that holds the variant.
! u0 R7 h* z; o2 G9 h- a, t- v8 Q2 G7 Y
        dp.rgvarg                                         = pokeVariant;% M# Z  D( x. Q3 P% n( L3 S; {
        dp.cArgs                                         = 3;8 |4 _. V+ H- c/ L3 C
        dp.rgdispidNamedArgs                 = NULL;2 b7 U# L6 \3 }* p; v" V9 E( @
        dp.cNamedArgs                                 = 0;7 ?/ u1 R( }+ b$ y8 d
" x8 t$ C! P  P( |
//        Call IDispatch::Invoke(), t' C' w( y, o3 |: W- H# R
; a. ?( _7 W% r* c) z& B+ u( [
        hr = m_pDisp->Invoke(
1 o/ _' p' [- g# p                pokeID,* S) [# r- v1 [5 _# ~& x' X- k1 J
                IID_NULL,
$ R6 S: w$ U4 w                LOCALE_SYSTEM_DEFAULT,5 u+ j0 o0 |3 D3 |! G6 q
                DISPATCH_METHOD,
) ]  d) r5 ]8 q0 ^                &dp,
, N+ F7 ]' R8 m                NULL,7 X$ b0 j9 t0 W& V  X  j  s3 t/ V% _
                &ei,
, Q6 R1 }8 l. ~8 q7 V# z                &uiErr);
* o. F! f/ @  p$ K4 \
1 m; V+ l4 m. E" G4 \, d3 @3 I2 D        SysFreeString(topicStr);
* M& |8 C1 h, r6 j# o        SysFreeString(itemStr);0 ~& X- Q1 N4 d7 b0 u7 m
        SysFreeString(valueStr);! X3 Z- y8 Q0 A8 {8 `
: @' M" H7 r9 K' w1 f7 _  x$ t
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
  D4 o" N0 j/ ?( e. H  D此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
. \, k! X; b: y$ x2 U* M1 B* A/ T% D! S0 j* w6 Q, {

! W' p) t$ ?" {) A" l3 h9 |% t, L2.这是request的程序
7 j2 A2 {$ c; [& f" d- {+ U! o6 ~//  Request a value from Extend
; d' c& y8 S7 K1 c* h* s+ Q//# Y' P4 E9 e" a% q
//        Initialize the variant that will hold the BSTR.  Set the variant's; [4 o( M% t1 Z. y9 E( E
//        type flag to indicate the fact that this variant holds a BSTR. Place the
; p6 a, O) X; ]* t. Q$ _- p/ s//        BSTR into the variant structure.
; \6 h" r; o1 |3 }+ n" n, x8 q
  S% W: W& x8 G$ n+ S: Y        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
( i' A" s1 I  U3 J) O6 {4 t       
% G. a  r# Q( x" X. p         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
* I# y3 E1 x; m        VariantInit(&requestVariant[0]); 6 f' `7 T' b6 c7 b& |) y3 k* j
        requestVariant[0].vt                 = VT_BSTR;
, C6 S' D' {% L' L: e, P2 W        requestVariant[0].bstrVal         = itemStr;
  k: C3 Z, _7 X5 n. r6 p% i9 g! D- F) Z( @! o
          topicStr                                         = SysAllocString((WCHAR *) L"system");
1 f4 _3 O; t, N( J* g        VariantInit(&requestVariant[1]); / v6 g. R# {; u, _7 R) x
        requestVariant[1].vt                 = VT_BSTR;
9 a+ y3 N. \, I8 z; R, B        requestVariant[1].bstrVal         = topicStr;
: A# ?4 I! ]& z# U4 A7 `! P' n& H$ \2 U7 G, a# k7 e" q0 a; E
//        Set the DISPPARAMS structure that holds the variant.
  o. N. P% E" @# ~* d6 L
0 X% K. c/ V8 h3 k        dp2.rgvarg                                         = requestVariant;  y# o/ |. `- p" ~' ~8 S6 R
        dp2.cArgs                                         = 2;
7 l2 l* O: q5 V6 x        dp2.rgdispidNamedArgs                 = NULL;' {5 Z$ D6 j$ }9 c6 t! z
        dp2.cNamedArgs                                 = 0;
0 u1 ?% y  c) X$ E( V
' R1 {  M$ {* X4 `. N5 z! d9 e         var.vt = VT_EMPTY;
& S" f0 X# v: K7 v; \/ W
3 ]) {2 p( w* L4 a2 s8 m+ v* [! P//        Call IDispatch::Invoke()
5 z8 i# W" Z1 H2 ?3 y
* I, t8 E6 @: Q. V: ^8 B        hr = m_pDisp->Invoke(2 C7 f8 C/ O# T  n- U+ n3 P* t0 h
                requestID,4 ]3 b! V0 v' V. v" C+ [
                IID_NULL,9 e9 @7 p, }: I8 K+ h
                LOCALE_SYSTEM_DEFAULT,
( T. h% z/ {* H9 Z9 }                DISPATCH_METHOD,
7 n" Y) }9 G/ p& N2 R8 w                &dp2,
. b. G: V) [, f. N                &var,
/ t* p, v) m2 @- L5 a                &ei,
2 I$ y0 H/ H" w$ T8 h+ _                &uiErr);  I. F  {) q: ^* m- n. k2 s
( ?8 h! m5 `3 k7 @+ W2 E
        SysFreeString(topicStr);
8 ~. s% m7 V/ o" y, N2 X4 N: u. x        SysFreeString(itemStr);7 m1 l2 W+ ]( d7 P( r# g
请问该程序是获得extend里面的哪个值?; ^  j% K0 N3 W" [- k; l
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-2 08:27 , Processed in 0.012434 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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