设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12635|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:5 M8 j$ ]* w) O! R
Name = (WCHAR *) L"Poke";
6 R5 C. |3 v6 O3 Y9 N- V3 h. `  |  X                
% L% n) }2 |9 e# |" J* y        hr = m_pDisp->GetIDsOfNames (
6 v9 Y( n6 m* m- h6 @" H% Z                IID_NULL,                                // reserved; q: Z0 u9 D' r( K1 J
                &Name,                                        // Array of names to get IDs for
' C( c( N9 N- o                1,                                        // # of names in the array, z' J. D; k* ^
                LOCALE_SYSTEM_DEFAULT,        // System locale
# l, j+ j  I8 P2 S  f                &pokeID);                                // Array of IDs to fill on output" ]; G  I0 i# D! u( p* J  _2 x
                       
4 k/ v# Y! A1 A6 V1 U# `        if (hr)9 H1 w' ~% n. q) o& ^- n
                {
4 I8 f0 u$ x  A: r; m6 T; i! h5 y                MessageBox ("Get Poke Unsuccessful");
& V& U, f/ v$ G+ c% q                return;
$ Y& D( M) c' p1 \+ i% B                }
7 Z) A9 G% V# \% [  D( {1 j3 @0 v* R# G7 Z$ Y! r. c6 t
/**************************传递数据给extend**************************************/6 u, K, J( r! ?% u) V( H
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);, o1 k% Y7 D( G. e) {
       
8 u  q- l4 B& a         valueStr                                 = SysAllocString((WCHAR *) L"1232");
( ^2 ^* L2 t/ H$ j- t& b4 f9 J& s        VariantInit(&pokeVariant[0]); 6 e: p# Q; z% K: H6 f
        pokeVariant[0].vt                 = VT_BSTR;$ H% W4 r3 T! o
        pokeVariant[0].bstrVal         = valueStr;- B: ^8 ~0 [5 C! k; E% x& Z/ i9 e

3 P8 [2 k% z7 F1 I         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
* q0 l$ j+ z$ C6 m6 Q9 |        VariantInit(&pokeVariant[1]); # g+ N$ u/ ~5 z% m
        pokeVariant[1].vt                 = VT_BSTR;
5 \9 w, f. N: |# X: q        pokeVariant[1].bstrVal         = itemStr;* @$ I* l3 s" n1 n& C' n/ s5 Y
2 i; U+ q! e7 ?. T
          topicStr                                 = SysAllocString((WCHAR *) L"system");! M* e* [6 G8 [/ h% O$ ?
        VariantInit(&pokeVariant[2]); ) e  w9 i; R2 w4 q8 {) U$ @. B
        pokeVariant[2].vt                 = VT_BSTR;3 q! p8 i  Q1 V5 x4 F- ^
        pokeVariant[2].bstrVal         = topicStr;
$ t3 x2 K# D  n3 e% b9 g/ E5 |, E& m
//        Set the DISPPARAMS structure that holds the variant.
! Y3 w7 k- v2 ?3 b4 c1 U
  c; \8 d  G7 h" O% B        dp.rgvarg                                         = pokeVariant;4 m1 @8 j- j0 ~! o3 O* s7 V" w
        dp.cArgs                                         = 3;. {% a5 j8 }8 J- R! t# t
        dp.rgdispidNamedArgs                 = NULL;: F7 ]) }6 C% K2 B
        dp.cNamedArgs                                 = 0;4 h" s( U! c0 K) f" ?

$ h0 }' H7 b6 L) Z8 N/ R  D) W//        Call IDispatch::Invoke()
5 z& W4 p3 U9 r8 z
% ?3 z) z$ L* j8 t# E        hr = m_pDisp->Invoke(" l. M5 M  i; x. u3 N& }+ H+ Z& }0 u
                pokeID,# Y& O# j; d& i+ i! s  J
                IID_NULL,
* @+ x5 n" ?3 x! e7 ^" L+ @2 ^                LOCALE_SYSTEM_DEFAULT,
* ~% N1 x0 d* j% x) q                DISPATCH_METHOD,8 A( {4 |$ K1 P" d' M+ _3 {
                &dp,
5 L3 M: Q3 `1 N6 B                NULL,4 B* k3 @9 t7 c9 f0 Q7 G" d
                &ei,
7 P/ l) s; H$ o% b                &uiErr);
0 n, N7 i: B6 z. }- m  ^
* `8 K, J2 e0 O        SysFreeString(topicStr);
; D  y7 e7 H% E+ {        SysFreeString(itemStr);
7 M7 b8 j6 s: I        SysFreeString(valueStr);. ~6 n7 i  C, ^

0 E4 J. X) v( x& i现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
) `+ U1 |- u) m此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
* m5 _; G6 k5 f- p8 T7 M; ~+ R- H5 M( q: w
1 a$ ^- d6 }2 y: X3 H
2.这是request的程序
8 U4 p6 L# M/ v, C//  Request a value from Extend
8 P8 t* O* u+ n6 A! H: i2 z6 [' |//% Z0 S; k1 h! M$ S
//        Initialize the variant that will hold the BSTR.  Set the variant's, V$ j0 m" X* e' H) r
//        type flag to indicate the fact that this variant holds a BSTR. Place the
; X, B" X- V3 {+ I6 W//        BSTR into the variant structure.4 F! L1 j( ~/ i, R# M  g
9 x* }% G2 r" c" g# @7 Q+ M
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
, h" ~7 B# X0 _       
) J* E! x' o9 S4 [: I; R         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
( |. @! q! X1 ^7 O3 a0 b        VariantInit(&requestVariant[0]);
; A' K6 ?/ w. l; k9 N: e' J1 D        requestVariant[0].vt                 = VT_BSTR;3 k# I: S! e  A; J9 s1 B) T7 V/ K! ?
        requestVariant[0].bstrVal         = itemStr;
1 G) m! U9 A4 H  P! V9 i. ~4 S% n& D+ x6 E5 @) L- L
          topicStr                                         = SysAllocString((WCHAR *) L"system");7 q$ Q$ g/ e" x- z% g" [
        VariantInit(&requestVariant[1]);
* U0 R) u# p% y+ O1 U& z4 K  v) j& F        requestVariant[1].vt                 = VT_BSTR;
0 J1 Q5 C7 H3 w% s. i        requestVariant[1].bstrVal         = topicStr;# G; y$ R3 L2 I! r  V* ~4 a5 _
  @1 U9 o0 p0 P7 ]5 V, u! O- G
//        Set the DISPPARAMS structure that holds the variant.; |* c' g+ L0 s, H6 B/ Q

9 R/ [: {) ]% k5 s7 E/ M        dp2.rgvarg                                         = requestVariant;5 s! x8 y' J% h' n1 ]7 m7 j& L
        dp2.cArgs                                         = 2;
  B! f( I0 g1 x! r, j& n        dp2.rgdispidNamedArgs                 = NULL;
: J- k) h* z. H! O; d( j        dp2.cNamedArgs                                 = 0;$ [3 [: F; B% {' d2 D. X
3 v! d/ v# K" p1 H4 a
        var.vt = VT_EMPTY;
8 Z  N2 a$ H7 `' V
+ m4 R, E2 D$ [& T//        Call IDispatch::Invoke()
/ X( A1 S2 n, e, k7 ^* G/ ]/ E
* W5 m! T9 j( L6 ~& B6 I: R        hr = m_pDisp->Invoke(
  o4 ~. }9 N% G- v% `; o                requestID,' z3 v0 ~. V& w8 l& W, Q( I) }
                IID_NULL,/ I, z6 f1 i- c  X& v* T
                LOCALE_SYSTEM_DEFAULT,1 a/ x! Y9 }$ {; r' h, C
                DISPATCH_METHOD,
& W; l0 J1 l; ]                &dp2,' |% s0 r1 m( W
                &var,
# ~- B' }/ W' v5 @! B6 ^                &ei,
1 C% `; }. k+ B# u6 @. L' x                &uiErr);, n" N3 Y- a/ }; V* }" B* J) T# v

+ U% c4 N' m+ q! Z0 F        SysFreeString(topicStr);4 d; ]$ p* z" S; b) |
        SysFreeString(itemStr);, k( J( M) R3 u( u6 n
请问该程序是获得extend里面的哪个值?
' K  _( N# T( A4 B2 t( v' Z) H如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-8-22 09:17 , Processed in 0.017361 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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