设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9285|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:! l3 k) z7 R  v- I! |
Name = (WCHAR *) L"Poke";3 B7 N  ^1 ^1 z  p9 |3 F
                 : W% g3 C' H" d* h
        hr = m_pDisp->GetIDsOfNames (/ o. o; Y! w- C3 C7 t- u, u
                IID_NULL,                                // reserved
  f( t& s' ^. L9 P8 D' i                &Name,                                        // Array of names to get IDs for0 y3 E6 q! P- s4 O: c1 i  e% [  d0 ?7 P
                1,                                        // # of names in the array
* ?7 |9 W5 m- N1 j  Y9 X                LOCALE_SYSTEM_DEFAULT,        // System locale
7 u3 b- Q0 `9 ^. N. ~3 D                &pokeID);                                // Array of IDs to fill on output
# r9 T+ {- P7 G% s* [                       
( N( @7 W7 {2 A, N2 |        if (hr)4 |0 f6 G* U2 B* Y' h
                {2 F$ s% ?* y0 j! D' v
                MessageBox ("Get Poke Unsuccessful");
+ L2 R4 j  C( J6 T8 r                return;
2 L2 b0 F4 Y! r' b                }, M3 ]- |/ F, a- P* c1 x
7 V' `: @: S7 t% g
/**************************传递数据给extend**************************************/
9 g+ h: O4 Q  F& e% _        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
) v  }' N2 j- A" P       
# S7 x# o( T6 z! L0 S; O4 X         valueStr                                 = SysAllocString((WCHAR *) L"1232");
' d3 h* k8 C+ M        VariantInit(&pokeVariant[0]); $ k' b2 J6 \& ?: W) n
        pokeVariant[0].vt                 = VT_BSTR;% y3 a/ D4 o8 K8 C9 O* g6 [$ G* Q/ G
        pokeVariant[0].bstrVal         = valueStr;8 B$ ]# o; v+ c9 x, D# U

  e! o5 O1 V( a5 J% h- }# [         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");) ?2 Z: S7 k. n
        VariantInit(&pokeVariant[1]); : ~. H/ g# ?+ L$ @/ `. i  y# y4 u4 ~0 E
        pokeVariant[1].vt                 = VT_BSTR;9 Y2 `5 y; b/ T4 I
        pokeVariant[1].bstrVal         = itemStr;
* r$ u1 H9 t/ T/ T# L# O" @1 R; Y5 Q, y5 O% p
          topicStr                                 = SysAllocString((WCHAR *) L"system");2 ~. u- Z4 R$ s- n
        VariantInit(&pokeVariant[2]);
. e* c# a! L3 E  A  _: K        pokeVariant[2].vt                 = VT_BSTR;5 U2 ]/ _8 }. t( g" `; A, P: v
        pokeVariant[2].bstrVal         = topicStr;
; }! P6 G6 ^5 M8 D8 Z1 v5 u! ?" m* N/ r+ L: Q
//        Set the DISPPARAMS structure that holds the variant.
3 |5 K- \9 q8 H: U  j, p/ F3 ~. T- I5 P7 {
        dp.rgvarg                                         = pokeVariant;# u2 r( a: o3 t" S
        dp.cArgs                                         = 3;
/ W3 d( i3 ]+ ^7 w7 D        dp.rgdispidNamedArgs                 = NULL;
1 B/ Q1 r  \  N        dp.cNamedArgs                                 = 0;
4 @  q5 L4 h' x
5 r: ~3 ^$ t, y1 g/ N. f* b//        Call IDispatch::Invoke()
! |$ j; v+ e# f% i
* E" U. b9 J3 T  B- s; `        hr = m_pDisp->Invoke(
3 ?' N; b& Y# N' W* H1 d* S                pokeID,
! J2 A, X3 N! G% Y7 E                IID_NULL,- F- c' }4 D" _  V
                LOCALE_SYSTEM_DEFAULT,
+ n) A7 H  f" H; g' I" R                DISPATCH_METHOD,0 k# n( K+ E( _/ p# n
                &dp,
8 x/ w2 M4 m7 m$ L) W" o. K                NULL,- C2 ?: J% k+ m" a9 n" O, t* F% }
                &ei,6 |1 ?3 _& M  f; `9 z
                &uiErr);
9 d. O$ m7 R# e/ h4 y! a' h) T% Q, X6 a- k% P6 D
        SysFreeString(topicStr);* F; M, ^5 J% v( n& O3 ]
        SysFreeString(itemStr);
9 M1 l- [( `" N        SysFreeString(valueStr);9 w( \' V$ h( r' E

. X: Q) q4 ~" t- g( U* N) E% Z1 J现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
/ X+ A+ a- I( G此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????& g  r' |6 E2 |; u1 Y! j* o
, q3 ^/ D& J5 B/ Q

8 }3 ~; e. t, F2.这是request的程序, O# c6 M  ^9 U/ L2 s9 T: q
//  Request a value from Extend- Y& g/ v/ m# z
//
; T9 V+ b! y' Q//        Initialize the variant that will hold the BSTR.  Set the variant's  [. K7 M+ `0 x
//        type flag to indicate the fact that this variant holds a BSTR. Place the& p! E( ^/ u1 D/ t  Q
//        BSTR into the variant structure.  E: R. s; ^& N) ?  q" m

6 \' P/ w- u& X: ?        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
2 M( w5 V8 ]: P+ G        8 v" ~" c) i) m1 b5 s
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");% u2 E1 [7 w/ o: d8 K: G
        VariantInit(&requestVariant[0]); . {6 J" E" |# n( J  X7 a* F
        requestVariant[0].vt                 = VT_BSTR;
$ }8 t+ w) q) x        requestVariant[0].bstrVal         = itemStr;; V% n6 G/ {$ o
; q* i: N. l$ B/ A" r' Q
          topicStr                                         = SysAllocString((WCHAR *) L"system");
7 p1 {2 n% T! D) n        VariantInit(&requestVariant[1]);
: m- Z) i1 o2 }9 B; E8 X        requestVariant[1].vt                 = VT_BSTR;$ d1 B4 ~3 ?  t
        requestVariant[1].bstrVal         = topicStr;7 ?: E) K9 M4 C* @

* B3 A7 D5 g* S//        Set the DISPPARAMS structure that holds the variant.4 J0 ~( B" i) e' s6 C/ Y* R2 y
; n5 I7 u- c% E  H4 q0 ~9 c; F
        dp2.rgvarg                                         = requestVariant;
5 X' [: k" i% M0 y" h4 z        dp2.cArgs                                         = 2;) U, A% W8 w9 I
        dp2.rgdispidNamedArgs                 = NULL;
, R& R' u, p$ [/ f: A! o' ~        dp2.cNamedArgs                                 = 0;! I  k2 w' Y! w. M$ Q% |8 Y

; r0 T4 ]5 s7 o6 D         var.vt = VT_EMPTY;- w. g- ?4 w  W/ v( t

5 c/ s' V" j( K1 D1 g, H) T7 p//        Call IDispatch::Invoke()
6 q* I& Q( K1 W4 x+ X9 b$ A9 W! B( Y( p& {( W$ B" T. f7 h
        hr = m_pDisp->Invoke(
& X# A" F, w3 g& U+ X9 o                requestID,0 X4 O$ t6 @, G3 m* e  V5 C6 t
                IID_NULL,
! x0 W, L1 Y. G; T$ z/ a6 n                LOCALE_SYSTEM_DEFAULT,
. B! \" L# S: h' D" X6 h( V/ \                DISPATCH_METHOD,
6 j5 ~' L' V  o) }. |' [8 O$ E6 E. r& b/ v                &dp2,
0 u9 q/ R2 u% a" _. P4 C                &var,
) M9 c* b) j5 ~: `; @# G1 q                &ei,
* e$ g- X) X, O0 E9 }5 ^                &uiErr);
2 v4 {) R' t) N
+ S$ ]! s' h6 G$ w, M* d        SysFreeString(topicStr);
9 H& c( t" v/ i2 J        SysFreeString(itemStr);3 ?& ]- i) [* t1 I
请问该程序是获得extend里面的哪个值?
+ G8 m" W! k0 ~/ `如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-4-11 18:42 , Processed in 0.017968 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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