设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11779|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
# `+ f! X# t6 f: e/ ]: G' u9 dName = (WCHAR *) L"Poke";
/ z( O. C8 V* G  W                 ' c6 g" P. s1 `
        hr = m_pDisp->GetIDsOfNames (  `) h5 ^" s6 I$ N
                IID_NULL,                                // reserved/ Z8 F; `8 {( A4 c
                &Name,                                        // Array of names to get IDs for
( @7 n/ Y: |4 B6 r) S                1,                                        // # of names in the array  A% x8 q: Q( S7 q: x3 t2 T
                LOCALE_SYSTEM_DEFAULT,        // System locale  P1 m: s$ I3 B; G. k8 S% p% V( D
                &pokeID);                                // Array of IDs to fill on output! r( y; {+ I8 B; D
                       
9 ?* N) R5 F" I- d$ {        if (hr)
5 w1 h/ _- f( ?/ q- U                {: \' h& I5 s( W* O3 G
                MessageBox ("Get Poke Unsuccessful");
8 U  M! W% v; g6 I                return;7 |/ [% H! U% ?
                }
* u" _5 H/ t0 m3 k' W+ r
! h- v0 ~5 c3 f- M; E& h9 c/**************************传递数据给extend**************************************/) J5 E0 k; k+ i6 p1 X+ D
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
3 h3 B: n$ Z! }3 e        9 B1 J  v7 h5 }' w7 U
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
, E0 M' N* l0 `' _# a; v! n        VariantInit(&pokeVariant[0]);
' Y& Z$ {$ p5 Y; V- u        pokeVariant[0].vt                 = VT_BSTR;
1 Q/ L; V( j( p+ O        pokeVariant[0].bstrVal         = valueStr;
* X  o. ^) d, X1 ~$ B9 w6 k8 g: v; b( G9 t
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
0 I0 U" f$ t# z. {        VariantInit(&pokeVariant[1]);
( N5 n. R5 a1 a) |        pokeVariant[1].vt                 = VT_BSTR;
* N- a% E' Z& N3 E/ r        pokeVariant[1].bstrVal         = itemStr;
  L8 t% {% K+ r6 u8 V
+ E: ]9 k* x7 W          topicStr                                 = SysAllocString((WCHAR *) L"system");9 E, v, e3 i6 K* r, O# l7 b8 y
        VariantInit(&pokeVariant[2]); # A0 M. P) I& X: ~* j
        pokeVariant[2].vt                 = VT_BSTR;
& R" f1 {' i1 X$ v, g        pokeVariant[2].bstrVal         = topicStr;
9 G2 L8 q/ d& B, X
( }9 L9 R! U; ~* }, m: m% q/ e2 w//        Set the DISPPARAMS structure that holds the variant." m  W) K- E: }' k
2 g0 i& A8 L# d4 Q$ l
        dp.rgvarg                                         = pokeVariant;
& I) n7 R2 E; i( S  J9 _4 J" Y        dp.cArgs                                         = 3;# X4 v( `$ K, H" B# x: b* C: m
        dp.rgdispidNamedArgs                 = NULL;7 j2 \, s5 g7 H
        dp.cNamedArgs                                 = 0;+ Z, F' B6 e5 K" v+ q! ]& S, n

  `' l9 g" r& f' l( z//        Call IDispatch::Invoke()3 ~3 q3 U' c/ w! ~& b  a2 y0 P

: a5 g! d/ \% @( F6 N* {# n        hr = m_pDisp->Invoke(
- B4 F: g- }9 z8 w- |                pokeID,
9 l6 U- U4 K5 ^* O: n                IID_NULL,
$ B$ }! S, Y6 Z1 p                LOCALE_SYSTEM_DEFAULT,
6 f0 Z7 W5 o/ q" t+ v; Q2 ?& g2 n                DISPATCH_METHOD,6 I- A( a1 Y7 w  S& ~
                &dp,
# k7 L0 `9 Y0 n# U- k: j) [) Z0 o$ B                NULL,
; N/ s5 j/ n  f: P; c; z. E                &ei,# k9 j0 ^2 c7 e5 k0 C2 B: o2 }1 U
                &uiErr);  L, ~$ i# h# J' `
6 i; T3 j4 R6 h1 U& S  a
        SysFreeString(topicStr);
) Z1 W1 M- ^" G* x8 R' r+ Z* D3 a        SysFreeString(itemStr);1 W' ]& X8 F3 ~! x. R; C
        SysFreeString(valueStr);
- O. L2 r& v# s7 a/ e0 I1 y
' ^+ {7 e$ F" D2 m. b& q现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
1 n( O+ s- @4 n! u此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
: e" o7 ?3 z7 ?3 p! b" o, v3 }
; P4 N5 P; J' z
0 F' Q9 I2 E' f5 x2.这是request的程序$ ~% g" Y) _6 |
//  Request a value from Extend
$ i6 r. h( w% I8 \7 z; ?//6 H' H" ]  i/ z/ b' g+ o
//        Initialize the variant that will hold the BSTR.  Set the variant's
/ M5 P& J) M6 g* s6 s//        type flag to indicate the fact that this variant holds a BSTR. Place the
) n1 t) U1 L& K2 m: o//        BSTR into the variant structure.& Z; [/ R$ Y7 x9 v1 _, y. @
8 c- f8 j% t" y: ^, U
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);$ L2 E/ b7 {4 o  E
        % h! H/ @8 O3 X+ m% K8 x- ~
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
2 r+ Z( U7 k+ N        VariantInit(&requestVariant[0]); ! F0 [6 u* w' c# M. W  l
        requestVariant[0].vt                 = VT_BSTR;$ [" g/ D+ H$ I) S6 ~
        requestVariant[0].bstrVal         = itemStr;; ]5 s1 r2 e( V
4 D: A8 |1 E) b* y/ P1 M
          topicStr                                         = SysAllocString((WCHAR *) L"system");
2 ^3 Q$ `2 Z  G$ |4 Q        VariantInit(&requestVariant[1]); 4 v# q5 }& M* K8 T
        requestVariant[1].vt                 = VT_BSTR;! O8 P) @. b4 M* [5 I$ A3 Y
        requestVariant[1].bstrVal         = topicStr;
8 V6 _" x- u. d' c) a- F" \0 Q# k; H$ s8 s% D
//        Set the DISPPARAMS structure that holds the variant.% B1 W2 K! K% k2 [$ j( g3 M
& b+ S/ i9 B7 Q) n/ m
        dp2.rgvarg                                         = requestVariant;. M" Y( l; b& ^: n9 r1 M: k
        dp2.cArgs                                         = 2;
, h3 z3 s2 u  P2 f        dp2.rgdispidNamedArgs                 = NULL;
9 x5 E- n  g7 l& z! z        dp2.cNamedArgs                                 = 0;
6 ?) P! n! N+ d3 y; {# U
4 y/ P  O8 R* ?% n; \) K         var.vt = VT_EMPTY;
: a$ Y  {, ~4 H& ^# T6 o7 ?! U5 l9 E+ Y
//        Call IDispatch::Invoke()
! R* H" p2 h; R' h6 H) v4 t; k: |' N0 O; @' P6 g  K
        hr = m_pDisp->Invoke(
- O) V+ d8 ~  \0 \& B3 D                requestID,: k4 w- |; I# R1 i* @
                IID_NULL,2 k2 x/ b  t- u& [! L6 j- N: \% g
                LOCALE_SYSTEM_DEFAULT,( @' m& a5 k; S. s* V4 n" H
                DISPATCH_METHOD,4 o' D# T% Z$ x1 c/ }0 Z
                &dp2,3 D8 ]# K9 d' r5 [$ _* t1 \
                &var,( r0 s- @. k' H/ ]/ n' s
                &ei,) U; e8 M2 o$ p/ T; ]8 ^
                &uiErr);
* R( C- |8 g4 D% s
8 I1 i1 }  f' H0 d$ U3 C) A4 t        SysFreeString(topicStr);
6 ]. w$ z! t* w0 I  h5 ]/ V. I% c        SysFreeString(itemStr);
6 T/ [, M! o) Y  [+ b9 |/ y. U. w请问该程序是获得extend里面的哪个值?
, w3 c4 \' Q( C+ N" v如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-7-20 01:59 , Processed in 0.014573 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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