设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9295|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:# w! s! H) |/ c  L: T$ e# L- J, J
Name = (WCHAR *) L"Poke";
6 U% p6 T/ }& V                 ; B. g, o, R# m: }
        hr = m_pDisp->GetIDsOfNames (
; `% \) {0 H0 A3 Q: e0 m' n                IID_NULL,                                // reserved
- o* a! J+ m. Q3 N3 v7 @4 G                &Name,                                        // Array of names to get IDs for; Q3 ~, q+ m9 ^% U! E, W5 n
                1,                                        // # of names in the array8 x2 E& t7 T' S( [  @! e
                LOCALE_SYSTEM_DEFAULT,        // System locale& [2 a% |9 S$ ~8 @( B5 H
                &pokeID);                                // Array of IDs to fill on output  b. B" O, R8 v$ h& m/ L
                       
0 d" I9 h! g! h/ E6 e        if (hr)
- o; v( g8 D0 s6 S8 N5 {- h                {
6 V1 \5 \& k* v5 P1 @) l( E                MessageBox ("Get Poke Unsuccessful");1 D$ q* t! g( N& |! g
                return;
& G4 L+ g# T' g& G                }
, R3 k; M8 d- a( H3 J
( ^! @: Y) Q1 l( A' _: a/**************************传递数据给extend**************************************/4 Z! M9 P" c: B, |) `# [* m' H
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);+ O# j6 W: ^* h- ^5 E; N- y4 v
        . s7 r, p0 F; a$ ?7 t: a
        valueStr                                 = SysAllocString((WCHAR *) L"1232");5 L9 l- Y1 R1 h4 [0 v$ n+ ?4 @
        VariantInit(&pokeVariant[0]);
6 _4 g0 \' Y* H# |. S! y        pokeVariant[0].vt                 = VT_BSTR;5 J" i& W( y) X9 r! w
        pokeVariant[0].bstrVal         = valueStr;' v: T: Q$ [1 J! M
% u. b& r9 z4 B$ z9 a. M
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
0 b2 Z! [9 r2 ^        VariantInit(&pokeVariant[1]); 7 \: M) j" u" y6 {, G7 P
        pokeVariant[1].vt                 = VT_BSTR;9 R/ u1 A/ z7 \) _3 m; i
        pokeVariant[1].bstrVal         = itemStr;
2 a% s0 G5 s+ a8 ]( }5 o+ K
3 E& Q9 O0 M$ f" d- {          topicStr                                 = SysAllocString((WCHAR *) L"system");
9 Q# }. [: Q5 @8 x" `- E        VariantInit(&pokeVariant[2]); ! k' H$ v- t  j( {' _
        pokeVariant[2].vt                 = VT_BSTR;
- W/ n+ f  X3 ?3 Q2 y( h/ Y( ?        pokeVariant[2].bstrVal         = topicStr;. N# E& \( Y* k1 ~, Y
3 |& m& ^( i; u* t7 x
//        Set the DISPPARAMS structure that holds the variant.) ?! i9 b% w% z4 [+ X' U( T6 l
! ~/ @- ]4 R( t5 U1 C' P
        dp.rgvarg                                         = pokeVariant;
6 y5 a% Q4 ~2 S7 \9 y+ ?9 V. [        dp.cArgs                                         = 3;
! L0 w( m; U7 s3 e        dp.rgdispidNamedArgs                 = NULL;
8 q# g0 I+ p. j3 l* n* |9 Z/ o# g5 J        dp.cNamedArgs                                 = 0;
6 ~/ j+ [5 h3 Q  n# `& }
4 O1 V. y4 I1 H4 t8 c//        Call IDispatch::Invoke()* C  E/ I( |& j# P. n! S

: Y7 F3 R& Q; J7 X5 Z" O        hr = m_pDisp->Invoke(4 R, s0 r: O4 F7 J6 }" v; U
                pokeID,) k; ^; G" \+ l7 s
                IID_NULL,
( `- ^$ d5 Z9 L8 A" J                LOCALE_SYSTEM_DEFAULT,
  n) }  g4 ?- Q1 X/ {                DISPATCH_METHOD,2 ]) f# F* L$ \% y$ m4 o
                &dp,& L( ~1 R/ P' ?. Y0 c) B
                NULL,
3 X" V5 S$ b9 P( V( e6 y3 ^9 j                &ei,
9 ~) A1 ^' m3 ~                &uiErr);
  T7 F5 \- R3 W0 r+ `9 C" v1 H
4 W5 s$ X1 p) l+ y* J+ F) v4 Z        SysFreeString(topicStr);. r3 `# ?' n- @; V+ i3 x; B
        SysFreeString(itemStr);+ c, |2 v9 n/ U1 A' h
        SysFreeString(valueStr);
7 U9 T/ _) h0 Z! v& d5 Z6 a5 p& T, E" O1 t( W4 \* N
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???5 o+ w, j1 w' ]' [6 V6 D
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
5 z1 |& P) _7 W+ {9 G- b+ E
, l  ^4 @1 i* `% @/ Q0 Q1 \8 B6 u
2.这是request的程序
9 r# }7 \  P, e: h9 l2 z! C//  Request a value from Extend
% s: N$ ?& A( ?  y% H//
, n1 |; |6 M- H* d3 m6 j- u7 l$ Y//        Initialize the variant that will hold the BSTR.  Set the variant's4 h, R1 S# j& E! k* |+ `
//        type flag to indicate the fact that this variant holds a BSTR. Place the
+ S5 ]( k) P+ p8 @//        BSTR into the variant structure.
# P& q" E5 W  N# }) a& t9 k9 ~' ?8 m& G$ {
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);) }- K, R/ [2 ?
        6 S* d' C7 R$ j
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");' P( D' L, [# W
        VariantInit(&requestVariant[0]); 7 S( @  i% {9 p# N5 x& L
        requestVariant[0].vt                 = VT_BSTR;
1 }8 Y2 h  |( T3 a: R" B7 g( `/ k        requestVariant[0].bstrVal         = itemStr;6 l6 U1 d+ V2 c3 N$ L) B

( y8 O( C4 F/ b" f$ i          topicStr                                         = SysAllocString((WCHAR *) L"system");4 @" m* \: E# h" P5 X% @; m
        VariantInit(&requestVariant[1]);
5 P& U& S! F/ x% o( d        requestVariant[1].vt                 = VT_BSTR;
" [. U/ N- N* n4 G& ]0 Q: H        requestVariant[1].bstrVal         = topicStr;; x! x$ x$ T7 |4 I, P- s5 M
  |/ o( w1 k7 r- Z
//        Set the DISPPARAMS structure that holds the variant.
2 _' W& |8 L: B/ u
( W. T6 Q+ i9 L. i3 G" c        dp2.rgvarg                                         = requestVariant;
0 _8 o% N. q1 B* x7 ]$ t% v$ H        dp2.cArgs                                         = 2;' y( N( {9 N" v; N
        dp2.rgdispidNamedArgs                 = NULL;- h# l8 {6 _# E, P
        dp2.cNamedArgs                                 = 0;* b" U9 q! }, G. |( t( d! k

0 G8 b, B# S/ B8 w! d4 f3 J8 a         var.vt = VT_EMPTY;% B9 h% j7 u. Z! q0 u2 g! i

* X: D/ F1 F% ]) z* G; L! p" s//        Call IDispatch::Invoke()
# F# q$ a* e% M. G
( z+ G. f/ V% x7 Y4 O- q        hr = m_pDisp->Invoke(
" s' b$ u% N0 q) G# N, A: e                requestID,
% q9 u  g5 D  w* n0 t                IID_NULL,
6 E0 s* l: y! o: z                LOCALE_SYSTEM_DEFAULT,
  r7 J$ y. A( i# n8 x) p  f                DISPATCH_METHOD,
& M: a' v  ]% {' p; F                &dp2,
: x# i1 w/ Z% y/ `# o' b                &var,0 T6 K0 h, e/ u7 [& e. R
                &ei,) q4 c  c% R8 [2 T) S
                &uiErr);
9 H  r8 E$ w! Y* y6 @' p- J/ j+ q3 ]  z- c$ R1 Z
        SysFreeString(topicStr);+ U6 ?; k# a; h) @5 J" s
        SysFreeString(itemStr);# v% {* |- o( V
请问该程序是获得extend里面的哪个值?
$ P+ t& l# N! `6 n如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-4-12 03:26 , Processed in 0.017959 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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