设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12858|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
9 ~' B" m3 @6 f& P. j0 r8 O  {2 g% GName = (WCHAR *) L"Poke";, V( E, [. r& j+ _! r# m
                
6 h+ Y1 U. N1 i& @* g1 o        hr = m_pDisp->GetIDsOfNames (
* @7 N6 s6 O  m1 e                IID_NULL,                                // reserved' o* e  Z0 H! H5 s4 h. p
                &Name,                                        // Array of names to get IDs for
/ z7 i4 P6 s4 V& M( y                1,                                        // # of names in the array
- t0 d3 p" L. n% Q0 `9 h8 a& s3 r                LOCALE_SYSTEM_DEFAULT,        // System locale
/ v) \! B; M* v% {- @                &pokeID);                                // Array of IDs to fill on output
# W. ~( V8 P; W1 h( s                       
" D. s& u; X7 M- K5 m; r8 H        if (hr)
9 @9 x9 y1 r$ P/ B% L% D8 Z                {
$ d7 p& D$ b# h                MessageBox ("Get Poke Unsuccessful");8 w4 A* B; R/ O6 x0 {% }3 a/ J
                return;8 j0 G0 m! G% c. R2 l
                }
! U# t. ~$ ]. o
, B* S: @4 R$ A, D! k/**************************传递数据给extend**************************************/
2 K) x8 _! {# P! y9 Y( D$ X; Y9 @1 S$ {        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);3 Q" J5 N  @; e
       
+ X( x9 G: U- \" P$ D- @( i) C         valueStr                                 = SysAllocString((WCHAR *) L"1232");- x9 y% I1 P1 \! i) e+ m" Z  ?- E8 f
        VariantInit(&pokeVariant[0]);
1 u6 J5 X( A1 M& K! [* o# X        pokeVariant[0].vt                 = VT_BSTR;
& _8 z9 K  f/ t9 A/ n! I4 G7 h        pokeVariant[0].bstrVal         = valueStr;" F: i0 q* C* b0 q6 Z8 O5 U
; v5 B0 w9 X  d3 }
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
0 K0 f) n5 |$ l1 u        VariantInit(&pokeVariant[1]);
5 F$ k# W$ ^% v# k" D7 V- Q" @        pokeVariant[1].vt                 = VT_BSTR;
6 X) B1 n3 u: f7 ?& g        pokeVariant[1].bstrVal         = itemStr;( n- X& V# C4 X# h  }

# s  `* P' x3 V3 G) D          topicStr                                 = SysAllocString((WCHAR *) L"system");
; }. k* k' x, a  x$ o( k        VariantInit(&pokeVariant[2]); 0 y1 f2 ]- R* n) G
        pokeVariant[2].vt                 = VT_BSTR;
  h/ W( O/ E  [5 L* z        pokeVariant[2].bstrVal         = topicStr;
& W. \. H4 [& a4 Z4 [
+ p' B* v/ a4 ], Z/ e0 Y//        Set the DISPPARAMS structure that holds the variant.
6 ]2 }& [9 Z6 c2 ]: ~& s: E/ o# |# ?. N; R% y' G  ?6 F* T: z
        dp.rgvarg                                         = pokeVariant;
; q5 ~0 Z2 }1 c" j        dp.cArgs                                         = 3;
4 x  g; l, y- u, h        dp.rgdispidNamedArgs                 = NULL;
9 Z  g: e& x8 \% M/ `) s5 e        dp.cNamedArgs                                 = 0;
' C8 A/ y2 R4 a2 N6 b$ x: ~% N
; [( U1 {0 M. e; j" e4 [6 T  d# V; C//        Call IDispatch::Invoke(), h- J- n# b3 u

  ]' F: `. I: r! a        hr = m_pDisp->Invoke(
* i9 D  z$ I3 T% @, W                pokeID,! h: |5 g- }3 z
                IID_NULL,6 l! G5 m: t0 W
                LOCALE_SYSTEM_DEFAULT,/ F6 ^# J# L0 }  v2 D
                DISPATCH_METHOD,
! ~0 E! K1 p9 ~                &dp,
' W+ r5 U  u8 P7 d                NULL,
# z! T+ n. K" F7 C' ]: r                &ei,
! B+ }4 v$ L  a* l                &uiErr);! `6 C- l3 l1 I

5 I0 q' S/ W1 h6 c. k- m        SysFreeString(topicStr);
/ m; e2 _* K9 j0 L: K5 A2 w        SysFreeString(itemStr);
) b( R6 S$ v, k) Z! _        SysFreeString(valueStr);# l+ |! p$ a/ g
+ Z" N! Z% I8 w- z' R" y/ [
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???3 }! U% v! `2 j
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????; C* W& x  J1 c/ L& A8 S& x

/ h: t, L2 ?# a. J# Z% O% I+ v2 T0 r8 z' z2 t8 w- L
2.这是request的程序
5 O" T, y: ^+ c! O( O//  Request a value from Extend. I2 p$ l4 s) ?- h" n- g% b; G" f
//
' l" x2 f7 _  `3 @//        Initialize the variant that will hold the BSTR.  Set the variant's
! d0 k& x0 l! n: p: m4 o) j//        type flag to indicate the fact that this variant holds a BSTR. Place the
4 e6 ]+ x# ], m6 x$ Q+ Z( s//        BSTR into the variant structure.
7 C9 }0 ?# T  }  h. s/ C+ l# W! d
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
. t, t8 H0 U. c        9 I5 g% Q2 {3 I% R7 M& I/ `8 ^
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
% U, ?! Y# ?1 t3 T        VariantInit(&requestVariant[0]);
1 X9 w# v3 S) |& b5 f        requestVariant[0].vt                 = VT_BSTR;" {& @- h8 z" E. a5 j) R: A
        requestVariant[0].bstrVal         = itemStr;
! ]3 @, T) ]) A6 x9 B2 m7 K0 A+ n! c1 C' h
          topicStr                                         = SysAllocString((WCHAR *) L"system");% S2 X- c6 m$ \8 h8 n/ [
        VariantInit(&requestVariant[1]);
3 n& _2 A! s# k$ Q5 s        requestVariant[1].vt                 = VT_BSTR;
7 }- ], J% z$ V        requestVariant[1].bstrVal         = topicStr;
3 W# q* ?* s5 m* p
2 X& k3 i5 e9 U! ?//        Set the DISPPARAMS structure that holds the variant.
: I+ M5 s+ v. g; ^1 N  e8 d
+ P0 v4 H* [9 l5 O* e9 U        dp2.rgvarg                                         = requestVariant;
& @% M# _- P( H, O1 V        dp2.cArgs                                         = 2;
- C' B# E8 \7 y4 N        dp2.rgdispidNamedArgs                 = NULL;9 y& ~+ c; N. m7 J# i! }/ e
        dp2.cNamedArgs                                 = 0;: r# H! E% {$ g  s- k( T2 i  y
! Y: W& _! J$ D( J. u
        var.vt = VT_EMPTY;1 o* z' l. v$ n+ Z

, {1 ]5 m8 U/ }//        Call IDispatch::Invoke(). P: ~6 O5 L) G; v! O+ |' w! `6 P) y
  H' Z5 Y9 |% q5 a4 h7 e& T/ v
        hr = m_pDisp->Invoke(; M. J) @7 N, S
                requestID,
$ T. O6 m, F0 M- b1 z8 s                IID_NULL,
6 o$ t4 `/ ~& P6 _* ?* d                LOCALE_SYSTEM_DEFAULT,
& m! P  k  p7 I                DISPATCH_METHOD,
9 t7 P2 k( q, ]: M                &dp2,2 O, D3 g8 C3 B3 m* O
                &var,9 ]$ X  Z; |; H4 y7 d" |
                &ei,
" j7 f0 b2 A7 i! d4 x; C( d                &uiErr);7 O" b) h' j% d: H+ T/ J

& R1 d' A* B) I# H2 B        SysFreeString(topicStr);
4 C$ i0 g; r7 Z% w. M+ X        SysFreeString(itemStr);! y: ~1 l) J  `) {$ ^
请问该程序是获得extend里面的哪个值?/ |/ t9 ^9 S/ x2 [) [7 }' W( z
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-9-1 22:48 , Processed in 0.017937 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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