设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8726|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:( K$ W: ~: X2 E' y
Name = (WCHAR *) L"Poke";
' [0 @* A  \( v& l( y                 1 ?1 q- N$ L- \
        hr = m_pDisp->GetIDsOfNames (
, ?% v3 x- F4 W! q. y- V                IID_NULL,                                // reserved
5 j4 k9 ^- M, E; x4 q                &Name,                                        // Array of names to get IDs for7 a0 n: }4 {  }5 @9 _
                1,                                        // # of names in the array
- I: i* i( n0 n0 E                LOCALE_SYSTEM_DEFAULT,        // System locale/ S3 m! e6 O- j, \& b' Q
                &pokeID);                                // Array of IDs to fill on output
) H% T6 X: z# Q/ _# ^                        * P& U1 g# O- k$ |& S, I0 i
        if (hr)
0 [- ], g* A( T) I                {2 ]  V$ o" f, Y5 h) j( u2 D: W# Z
                MessageBox ("Get Poke Unsuccessful");
9 O  k, e2 _0 b: n3 P                return;
; ~6 A- j" T8 u1 s                }
; M* N! ^1 i, t
' c1 _5 o8 {# v2 D: i4 f* l6 a/**************************传递数据给extend**************************************/( o6 E$ M5 b9 d; ^
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
( }+ j0 X" Y  O& h        " _7 r5 i# h5 }2 V! E8 w7 ?
        valueStr                                 = SysAllocString((WCHAR *) L"1232");! m8 A/ E4 |* Y' S& o
        VariantInit(&pokeVariant[0]);
) Q( q! @3 X3 c: U% \! a6 n        pokeVariant[0].vt                 = VT_BSTR;
7 q# E8 {* d2 |9 t# T        pokeVariant[0].bstrVal         = valueStr;$ j* `3 `, k4 x8 k8 d+ R4 d

2 N, v1 Z( r+ w! Q         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
7 T. S# A1 ?6 x$ Z3 p0 `$ W        VariantInit(&pokeVariant[1]); 8 l" i: e" g& u' T$ B& M
        pokeVariant[1].vt                 = VT_BSTR;; r8 T7 z. [4 R- D% w+ W
        pokeVariant[1].bstrVal         = itemStr;
8 K9 Z1 m5 E4 V5 x1 `
! ^& z7 u6 f  y0 d" M          topicStr                                 = SysAllocString((WCHAR *) L"system");
- N- u2 E  h1 X& p' d8 D        VariantInit(&pokeVariant[2]);
0 G+ h8 R- |0 H/ Q* k7 y' N1 G        pokeVariant[2].vt                 = VT_BSTR;$ p9 s3 V0 E! U+ Y/ ?
        pokeVariant[2].bstrVal         = topicStr;
7 Z. O/ X. w. }+ ]8 w7 o  q' A+ b  D( O, W+ |
//        Set the DISPPARAMS structure that holds the variant.' D% B% p" I  x- {: n$ i
* p9 E% p+ [% `) B) B( F$ B: S) p
        dp.rgvarg                                         = pokeVariant;% }7 p+ w2 n3 G" P6 s
        dp.cArgs                                         = 3;1 i9 r. \, {0 c
        dp.rgdispidNamedArgs                 = NULL;
% U. w- w" y% j" Q7 A' i: ~: C9 ^        dp.cNamedArgs                                 = 0;# ^4 c5 @4 N  L: o) e$ D% [; s
; J  Q# ?: ?" e8 T$ h
//        Call IDispatch::Invoke()9 I/ k8 Y  J' X0 J5 K* V
2 @2 F. [8 ^& I( \$ g
        hr = m_pDisp->Invoke(
; T1 k* m0 j8 n* v1 Q                pokeID,9 q8 m% o0 o- E0 E* G/ Q
                IID_NULL,
2 h3 g& R7 U8 t# s* E6 n% ]                LOCALE_SYSTEM_DEFAULT,* W* z5 y: E* H! e
                DISPATCH_METHOD,
; \; y# T( t% q% w8 ~                &dp,
* U( O2 ~* r, g# Q                NULL,
! C% Q1 R& \, s1 I                &ei,4 \6 F1 W& d% k$ H3 b
                &uiErr);% g+ C/ I" X6 u$ M* p9 }" n( g0 ]0 y
( J* G* i0 ?+ o- x2 S: r
        SysFreeString(topicStr);
; l1 G; v+ i# x5 [2 h5 y+ o3 b. L        SysFreeString(itemStr);
# ^* }4 B2 o5 {& O. z/ o        SysFreeString(valueStr);
8 V# Q% i8 A8 ]3 @2 ^$ H  d
0 O$ L; x6 ~, G# O  ^) X现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
& M- H8 c9 t; Z此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
" n1 O7 Q+ _" x' N4 W6 a! ?( n8 C
' K, s4 P) g, x5 Q: e" n% a( O( s+ q3 g+ D. V
2.这是request的程序4 f; |" n+ E% q% _, b9 M! A9 a
//  Request a value from Extend4 C- m+ V" n1 I. n* G1 d' s9 j
//& u( P3 ^' m+ c& S9 [$ K
//        Initialize the variant that will hold the BSTR.  Set the variant's
1 C4 f* w* T$ i) e//        type flag to indicate the fact that this variant holds a BSTR. Place the& H' k0 P2 O! |/ H2 j/ t
//        BSTR into the variant structure.
. k3 a6 q8 K% I" T4 ^, v  B
# k+ \" w+ h6 I4 @! e        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
: W) c' `! J5 m: F) k       
8 P1 E3 m3 {- a1 j3 h         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
# y) j7 \8 d8 t- X7 l1 d9 ^( M  Z        VariantInit(&requestVariant[0]); ( }! p2 A$ ^  o1 w3 V3 Y
        requestVariant[0].vt                 = VT_BSTR;1 b  U' t6 c! l. P( a
        requestVariant[0].bstrVal         = itemStr;
/ b) N* ]0 G2 _0 @3 A
0 ^) V! }! F$ q/ p. T          topicStr                                         = SysAllocString((WCHAR *) L"system");
, F" ?! b# @- E5 a4 R4 t7 o        VariantInit(&requestVariant[1]); 1 X4 A8 o3 V1 [* M
        requestVariant[1].vt                 = VT_BSTR;& h- b9 B2 ]" [( \' i; n9 O7 y
        requestVariant[1].bstrVal         = topicStr;
% L* g! |& I: _& [! f8 X% V1 l3 [: c# v$ m3 |; [6 S" ^
//        Set the DISPPARAMS structure that holds the variant.+ a+ N. |0 w% s% ~! m5 _
2 \1 K; _3 N# c, t" k3 h$ O
        dp2.rgvarg                                         = requestVariant;
% Q1 X  w: q0 z! \3 b9 ~        dp2.cArgs                                         = 2;
8 _! i" i  r3 s3 g, q0 x+ R        dp2.rgdispidNamedArgs                 = NULL;
! o/ `! _  c6 b- G/ j3 y. n        dp2.cNamedArgs                                 = 0;, \! g9 M  X7 {* m. Z7 [
# c! O- B" E4 B3 y& w
        var.vt = VT_EMPTY;
. c  C# G. p' a7 _$ b; U8 ]
" F% M6 b6 y5 P: Y$ M7 |5 u4 h//        Call IDispatch::Invoke()7 d; X* w0 b6 s; y2 _
+ \  n3 T: b3 b2 s$ a. e
        hr = m_pDisp->Invoke(/ e% s0 x# G, N3 _3 L
                requestID,
! Q- R* {4 z" ?) x2 F, G9 `9 L                IID_NULL,+ f& }: L+ L* o
                LOCALE_SYSTEM_DEFAULT,
6 x$ y* s% L% t! O5 L5 F: ?                DISPATCH_METHOD,% T2 H7 t6 c" w- E" Q8 K' x
                &dp2,. U& {0 v) {) a' f$ g5 h- _  r. `; m
                &var,
# q0 o; p! s: _) c9 F                &ei,
; R' b' b4 X5 K- i                &uiErr);
' ]2 D7 F! g  c- f- R! x
  k5 Y2 M7 r* T4 K: Y        SysFreeString(topicStr);
- B, }! q0 }  f& [+ p2 D. b( ~        SysFreeString(itemStr);3 Z7 x+ C1 S/ @+ d% l
请问该程序是获得extend里面的哪个值?
9 M& Q- B- `6 y0 _. P9 T如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-3-13 04:56 , Processed in 0.017682 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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