设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7423|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:9 V. O) w1 h# F/ Q/ o  `7 p
Name = (WCHAR *) L"Poke";* L) V; y$ ]( |9 V; u! N) `4 C
                
" N& E3 F0 t5 v- }( G. N1 N        hr = m_pDisp->GetIDsOfNames (/ w: J; m& V9 Y7 y5 f0 K  C
                IID_NULL,                                // reserved& m8 `6 f- N# Q+ o+ {  v" F) i! Q! K
                &Name,                                        // Array of names to get IDs for& T. H3 e. u* _( o; X
                1,                                        // # of names in the array
; Z) q( k. l, }6 b                LOCALE_SYSTEM_DEFAULT,        // System locale
- o" a/ P7 k: X+ X, K" H                &pokeID);                                // Array of IDs to fill on output
) N0 X, c5 j2 ~5 Y1 ?& [* x3 f                       
) ?$ i1 _  _' ~, ]5 g7 u7 m+ `" V, I        if (hr)  T1 H& ?+ z4 I9 [+ N
                {/ z) E5 ~/ h6 D2 |$ P9 x7 `
                MessageBox ("Get Poke Unsuccessful");
$ V! Z3 V! Q1 @3 [+ r                return;
$ t: k7 R6 s3 [" R& E9 R( G                }
6 G0 p( q. l3 ~4 J- ?' `; d6 S3 _+ s% D6 o" l
/**************************传递数据给extend**************************************/
! v) D6 S6 z2 F        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);5 s: Z. C" [8 X  a, n
        , k2 Q! l; F! c! E
        valueStr                                 = SysAllocString((WCHAR *) L"1232");2 R% ?% w8 I3 B/ _, I$ E
        VariantInit(&pokeVariant[0]);
0 n4 ~! G& T$ q, k( w/ S        pokeVariant[0].vt                 = VT_BSTR;3 L) h3 r+ E2 `9 m/ ]! a- f2 g
        pokeVariant[0].bstrVal         = valueStr;0 B5 P' D3 w: _/ `) N

' k8 B3 _% t# j: q8 y/ b         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
2 w3 W; c, u) E, |        VariantInit(&pokeVariant[1]);
! y5 a- @# y- G. V        pokeVariant[1].vt                 = VT_BSTR;: g# n1 `* [$ Y3 R
        pokeVariant[1].bstrVal         = itemStr;
. C! Y+ K% {7 v3 Y2 z, j7 v1 g# A" Z* ~. Y' |" l: c0 h
          topicStr                                 = SysAllocString((WCHAR *) L"system");
; ]: H1 ]/ a1 s; z7 s7 Y9 N" W+ f  T' q        VariantInit(&pokeVariant[2]); 3 K/ U4 o# G0 b, A4 E) B  o: |2 S
        pokeVariant[2].vt                 = VT_BSTR;
1 E% v, ?. @! y! F        pokeVariant[2].bstrVal         = topicStr;
0 _+ C# U' r$ q; i
2 Y# b8 y* G3 Z' p1 z  u//        Set the DISPPARAMS structure that holds the variant./ ^  J8 r* I3 K$ ~. o
) d$ U; I4 H9 ]  u- H* k
        dp.rgvarg                                         = pokeVariant;: K+ k: t9 a5 X* A0 B+ p1 V
        dp.cArgs                                         = 3;
) v1 H( A) w. h; K8 c1 D: m        dp.rgdispidNamedArgs                 = NULL;7 |; P; K) D* t! T/ {, I
        dp.cNamedArgs                                 = 0;
# |4 s9 ]6 v4 w
( C- B; ^' u$ X, }) K//        Call IDispatch::Invoke()
' m% W: W" [2 O7 g: q3 v  r+ [
$ |) ~8 l0 S# G8 N        hr = m_pDisp->Invoke(1 i5 {5 P+ O/ Q+ R
                pokeID,0 X5 N8 V* C' {) W2 Q6 |
                IID_NULL,
0 P0 z* w& C) Q$ {) P; y' a                LOCALE_SYSTEM_DEFAULT,* C' s: m. t/ v- J) m
                DISPATCH_METHOD,
) ?  W& B2 B$ j8 ?7 B. o                &dp,9 T" z7 R9 j- ]1 n
                NULL,
  i1 K: J* H' r/ Z6 ?; b4 A3 ^                &ei,
( M+ E: G+ l6 J- B* f, X- U                &uiErr);
0 O. l5 K! {# p$ t1 E/ Z& k. }# d% f2 c8 ~4 i# k! a0 \- b3 o
        SysFreeString(topicStr);! P% t  q- ^$ K0 T4 y! f
        SysFreeString(itemStr);
5 E9 y8 d" l4 f5 k" |5 \        SysFreeString(valueStr);  c( k$ ]8 S& ]

! H% L+ W4 _2 \2 X% i现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
) v* b0 i" n1 @* T3 l8 i此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????: k6 u$ a9 u: @
( e# S; U' G; B- h3 S+ L8 |
8 F5 V; p, ~! B) ?
2.这是request的程序! V% ~2 Z2 k* P
//  Request a value from Extend
8 r( t( M) k' H7 A//
6 E! c+ b' d0 C* ]; i, o- H; C//        Initialize the variant that will hold the BSTR.  Set the variant's  c) i5 a2 c( E) Q: |! j
//        type flag to indicate the fact that this variant holds a BSTR. Place the
9 @; T' j* T  l7 }9 D" x//        BSTR into the variant structure.
4 Y  o& h$ p6 C$ C2 y
' ]2 S& g+ y" }! v6 ^        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
0 ^, s* m6 w1 |7 o       
) p/ g8 M. I# H5 I- ?$ d! M         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");* B3 I9 Y. ^' i* e) m) Q7 L1 \
        VariantInit(&requestVariant[0]); 9 n8 m( a4 G6 R+ e, q& b3 b. d
        requestVariant[0].vt                 = VT_BSTR;
, X4 y* L. i2 \5 B! s" N6 ~( {* C; d        requestVariant[0].bstrVal         = itemStr;4 u: ~" S8 n9 f  F0 b
0 ~4 A! o. U) l
          topicStr                                         = SysAllocString((WCHAR *) L"system");% X% Y/ L# }9 W# s
        VariantInit(&requestVariant[1]);
: t" n  b2 b" \' |        requestVariant[1].vt                 = VT_BSTR;
, ?, }8 l9 h2 m        requestVariant[1].bstrVal         = topicStr;
* ]5 }; c4 T, c+ |0 w$ j. @0 ?8 @9 O) u3 X6 M
//        Set the DISPPARAMS structure that holds the variant.0 J* M' Q. X% u- v  }9 B$ @

, i: ^% j' Y. `' m5 a+ K* [        dp2.rgvarg                                         = requestVariant;  s2 ?7 i$ w. s" u& d. r
        dp2.cArgs                                         = 2;/ r& ~: r( P+ J
        dp2.rgdispidNamedArgs                 = NULL;1 U" e$ @7 S3 \+ A- ~
        dp2.cNamedArgs                                 = 0;9 M8 Z  v. Y8 d
4 ?1 q; s* u) J9 T6 d" Q
        var.vt = VT_EMPTY;) i" K& m. B! I$ {& f  A! Y
; P  z# B; n" C, T4 @
//        Call IDispatch::Invoke()
( F, q. T" |, t# D/ q; o
0 ~2 [! r% a* h0 m        hr = m_pDisp->Invoke(
+ j2 L5 @, F( J. D) u; f                requestID,
2 U6 p6 b: f9 s. h. }                IID_NULL,
/ U$ q* {4 P. c, I: t2 [                LOCALE_SYSTEM_DEFAULT,8 {! O4 z7 K: Q
                DISPATCH_METHOD,- q* z+ y$ e1 j  v
                &dp2,5 {  w3 y: u4 w" I7 S( c
                &var,
2 X$ G' Z. X% B1 i2 P                &ei,
2 {, f  U) w4 G& }" U% m/ v                &uiErr);) F4 w  C+ ?" t5 o+ S) W) j9 A
6 l' U, J5 p4 ]+ j! ~$ C2 Z
        SysFreeString(topicStr);+ \+ ^2 X% b+ Q/ J) `# ?
        SysFreeString(itemStr);9 R% _3 v" F, g: Z# x/ L- V
请问该程序是获得extend里面的哪个值?
3 K1 W* ^0 A8 \+ E% w, x9 B% J; u如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-1-19 17:27 , Processed in 0.016335 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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