设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10179|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:1 p) k  N. g" E
Name = (WCHAR *) L"Poke";- w0 q* b  z# i. R
                 7 c( q0 ?. q6 u+ T6 H5 k
        hr = m_pDisp->GetIDsOfNames (. I+ j# L8 z3 d! L$ b# M0 D* g7 Y
                IID_NULL,                                // reserved7 Y2 t) I" w+ U: C
                &Name,                                        // Array of names to get IDs for& y- U" l8 b0 z
                1,                                        // # of names in the array
: L0 I& m. b% d  {; }! Q+ X                LOCALE_SYSTEM_DEFAULT,        // System locale/ m  J" M  Z- {& P" k
                &pokeID);                                // Array of IDs to fill on output
6 L! q7 S' n2 H" ?7 o: M                       
" d, w: }  M- X* U$ V! q        if (hr)
/ g' i+ `6 y8 ^; C                {/ n0 A4 p: K) t  }: z/ d
                MessageBox ("Get Poke Unsuccessful");
7 h( g& y5 X- _                return;
! n# A; a# i0 s9 H/ H2 Y! o                }) i8 L* Z1 _& S; D5 j; P& ?

* C. t' Y" h' [3 `2 R& ?; g, e5 N/**************************传递数据给extend**************************************/4 w& f, w5 R9 z" a2 o7 L4 v! \
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);9 U# e; i- G+ o. ^9 }
       
7 ?" l- v) k; j7 |0 W         valueStr                                 = SysAllocString((WCHAR *) L"1232");6 {+ M8 [6 l/ S+ h9 s1 y  s& q
        VariantInit(&pokeVariant[0]); - w0 X3 ?5 z( k
        pokeVariant[0].vt                 = VT_BSTR;0 i6 b  ~. `4 l3 P9 k; g# g+ G) c
        pokeVariant[0].bstrVal         = valueStr;1 R; {$ L% z6 Y1 w% q9 m/ [

. W* w* w. K3 s) R; P         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");' |3 x. c% k3 h" W
        VariantInit(&pokeVariant[1]);
8 i+ j1 t4 T6 e" T2 K        pokeVariant[1].vt                 = VT_BSTR;3 n/ z& b1 G: W3 Y
        pokeVariant[1].bstrVal         = itemStr;1 H) w+ x* Y* D6 h9 ~7 X. ^

5 [1 l9 O; ]3 m  o! E          topicStr                                 = SysAllocString((WCHAR *) L"system");
' H9 W8 [0 f6 M. i$ ]1 P. D        VariantInit(&pokeVariant[2]);
. Y7 q: e0 U# o5 Q& v1 x        pokeVariant[2].vt                 = VT_BSTR;
0 e: Q3 l; z6 o- `9 a        pokeVariant[2].bstrVal         = topicStr;
" U. }7 y# y' ~; ?
8 I0 h4 b, }) i' p& s$ ?. L9 R//        Set the DISPPARAMS structure that holds the variant.3 r% K; W5 i) s1 ]: @3 i1 G1 z

, c! q' S2 {% X9 ~) `4 u7 O        dp.rgvarg                                         = pokeVariant;
4 v, `0 @% U' U+ h# M6 T" f        dp.cArgs                                         = 3;/ y9 h! t8 d6 n0 D
        dp.rgdispidNamedArgs                 = NULL;7 m8 {- o# ?6 _& v" Z: Q
        dp.cNamedArgs                                 = 0;5 y0 `. y0 E! t. I; y

% g/ X2 C' N" Z+ e: D2 x) e//        Call IDispatch::Invoke()% O+ m4 z8 B* H9 p& Y- X$ l/ z

" d2 Q; o' }  i: d2 V% h        hr = m_pDisp->Invoke(
2 A* K+ ]3 ~1 k+ r  }) t                pokeID,) I- P) Y5 s9 ?% x) C; K
                IID_NULL,0 m4 O# _, h. H
                LOCALE_SYSTEM_DEFAULT,
1 Y$ V2 S; h( s" V                DISPATCH_METHOD,
$ S& v% K' `! b+ ~' W# |                &dp,# Z) f& @; @( I% U3 T3 V" h# A* |# ]
                NULL,3 x1 R+ M! V# O4 ?& n
                &ei,
/ i$ z+ z6 i) ?* S: ]; \0 B                &uiErr);8 Y& q$ h/ j: `1 v! h

; P$ w% Y" D5 e( D        SysFreeString(topicStr);
' l/ \! o3 T6 [% P9 U        SysFreeString(itemStr);
' r8 C4 p5 a, F- g8 ?; H        SysFreeString(valueStr);
" ^- o2 b+ Z$ L! w
  l$ `8 M  O3 Y$ N现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
# G) O- @- Z  Y  S% C此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????& f1 c- G) u" Y' A; b6 a4 u% r

8 W0 h2 I5 F: x
4 ^1 {. j& d, t; q* U2.这是request的程序' q+ f) a2 C9 T5 j4 E
//  Request a value from Extend: l$ C  k9 }' s; x1 o5 Z
//
2 I# a% E7 i3 C1 F  g6 p1 }//        Initialize the variant that will hold the BSTR.  Set the variant's
0 l+ o7 l2 R! T5 z0 G//        type flag to indicate the fact that this variant holds a BSTR. Place the
0 q+ n& o/ e* m8 B- f- i( r//        BSTR into the variant structure.. {7 W/ [* J# l. ?/ e
; V) x6 G' z5 n6 D
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
, K' v, g! }0 r3 ~+ b. T        ) ^5 q$ P0 H4 A% f
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
0 h# l6 E& }8 M0 l) g        VariantInit(&requestVariant[0]); " e' R" _2 F+ ]- R; f) `6 D
        requestVariant[0].vt                 = VT_BSTR;
4 l9 ^6 X. h- u        requestVariant[0].bstrVal         = itemStr;
% Z9 [) L' n2 c2 A) |7 T0 f$ }
- n/ I! \  l  ~. G          topicStr                                         = SysAllocString((WCHAR *) L"system");
- H5 p% [/ n8 R  I+ a% n        VariantInit(&requestVariant[1]);
: K6 e. h7 Y+ S: p( b        requestVariant[1].vt                 = VT_BSTR;0 h- O& S" w4 |* ], k
        requestVariant[1].bstrVal         = topicStr;
8 G! H3 ^& @2 k& q8 h5 z1 ]+ k  ]0 P) z9 H/ v
//        Set the DISPPARAMS structure that holds the variant.
8 L! M; N/ P- {+ B/ v/ @' }1 Y4 U* K9 R; z
        dp2.rgvarg                                         = requestVariant;
# Z/ V' r- y) \  p9 [$ t! w# x% @) O        dp2.cArgs                                         = 2;  |% M) p: b4 \. G1 H/ x( q
        dp2.rgdispidNamedArgs                 = NULL;
  n& M" M7 `7 {; o        dp2.cNamedArgs                                 = 0;
' K( O* f: M( B0 p8 B  c8 N1 M+ a1 w, K* F: F- O9 e* d5 n
        var.vt = VT_EMPTY;* |* ?% L& S) [

3 M" a2 \( j0 `+ R9 u0 L" Y" H6 |//        Call IDispatch::Invoke()
! ^7 f1 i/ N; Q' V
9 H1 r- D/ Z% H. E; \        hr = m_pDisp->Invoke(
* b# d9 q* ~+ [                requestID,& c9 m: X- A; p; K. p! k, i6 T
                IID_NULL,+ a8 Q, b; l, D6 s' Q3 v2 L
                LOCALE_SYSTEM_DEFAULT,
0 W' m1 }& p2 x/ m" i9 f, e' w( D1 y  n. V                DISPATCH_METHOD,
* C2 g, b3 I1 a! p$ M- S4 ~                &dp2," q' u: e7 g. W: D8 D+ l9 D- O4 h
                &var,
2 I  v7 Q6 r- |" A- Q1 p: B0 Z                &ei,- N; ]/ H' M7 Q" |; D- e6 m, `
                &uiErr);" N$ [! ~2 I+ V" r

, l$ ^0 D; M$ u% @+ t, E! c        SysFreeString(topicStr);
8 v4 p3 R+ g- F        SysFreeString(itemStr);
( n' _# ?( F2 v" _请问该程序是获得extend里面的哪个值?
3 _: Q* A) M/ G9 U- v# p如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-14 16:59 , Processed in 0.016839 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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