设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11340|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:8 j) |# y9 D& r$ K5 c2 R
Name = (WCHAR *) L"Poke";- G5 L$ `6 V% M
                
/ t, \4 t3 O/ I* I  R; u        hr = m_pDisp->GetIDsOfNames (
0 @/ Q/ |& F, h* B7 }! {                IID_NULL,                                // reserved6 h6 O# C8 L+ J+ {+ ]
                &Name,                                        // Array of names to get IDs for9 ~  e6 O& k% z7 y
                1,                                        // # of names in the array- d; d( i0 P3 m
                LOCALE_SYSTEM_DEFAULT,        // System locale
6 D5 c8 \& f% d6 J+ I2 A+ |                &pokeID);                                // Array of IDs to fill on output2 @2 H/ u& {  c$ z0 E5 W: p( J
                       
* w  M' E# ?# B        if (hr)& k, |  `: E: i. T" u/ h: F
                {
. @8 l+ w% V; B' A( L                MessageBox ("Get Poke Unsuccessful");
& [8 l) L8 B$ s" V, I. c                return;
2 N7 C- G2 S1 L8 S* E# u6 |! b                }1 J. z8 `2 G# u

; E. h) i4 u1 g! S" S/**************************传递数据给extend**************************************/, t: R+ n+ b8 a6 K8 _9 s
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);/ U6 \( k3 ]$ M8 U$ N" J+ u
       
  o9 l) M  O7 a# d9 Z         valueStr                                 = SysAllocString((WCHAR *) L"1232");
4 m4 j, I" T7 t  S) v        VariantInit(&pokeVariant[0]);
' E: R" r# N1 ?' w2 q0 A        pokeVariant[0].vt                 = VT_BSTR;
: @! T( j: F8 k- j3 T' g8 `+ i        pokeVariant[0].bstrVal         = valueStr;
. `% a- A# \. J2 K8 E4 l0 O
' j, t% t# A* }. M' z7 g' x) O         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");# }! i" t* P+ y, |! j' v2 c* B, |
        VariantInit(&pokeVariant[1]);
' ]+ p* j; J' [8 z/ Q- A; S% s        pokeVariant[1].vt                 = VT_BSTR;, [% }9 E/ j" k, @( ]4 s
        pokeVariant[1].bstrVal         = itemStr;
1 [0 T7 b  W$ ~5 o! n8 T# C- E: ]6 i) @3 X, U" Q
          topicStr                                 = SysAllocString((WCHAR *) L"system");% K0 g2 }4 n, @" k) Y3 h" I1 G, @7 ^
        VariantInit(&pokeVariant[2]);
3 \/ c1 H- c6 [6 e        pokeVariant[2].vt                 = VT_BSTR;- Z, `" L; l/ E; ^
        pokeVariant[2].bstrVal         = topicStr;
( w! I3 w4 s2 j4 E. i% z. W0 l) p1 d
//        Set the DISPPARAMS structure that holds the variant.
# L: @" o2 B6 z0 Y& d1 ]/ y7 v, d4 T* S. Q3 k$ i  U
        dp.rgvarg                                         = pokeVariant;( L* \8 P3 Y( a0 ^7 I  y
        dp.cArgs                                         = 3;5 a- h; a0 v  U2 V7 `$ {- L
        dp.rgdispidNamedArgs                 = NULL;4 f1 G/ g- T& _( S( C9 J! P4 C
        dp.cNamedArgs                                 = 0;5 g- z# g& ?: {4 C3 l2 f% f

$ |$ A3 i/ y8 a- z; R; b//        Call IDispatch::Invoke()
4 X6 x4 ^& T0 g; Q; C% a, z1 X- D7 A. l. v+ ~: ~0 n( k# Q- |4 p+ ~
        hr = m_pDisp->Invoke(7 T- ^) ?- r; J0 x+ I# t! Q
                pokeID,
" d* n7 C- g) [$ m" p+ A+ h                IID_NULL,) {# i" d! I+ K9 \  n
                LOCALE_SYSTEM_DEFAULT,- @6 v- I, {( k7 `
                DISPATCH_METHOD,8 Y. u1 M. f+ r- a
                &dp,
' x& v1 _4 d* {2 S; n- h8 B0 R( q* d                NULL,
, m7 @" i) M' [2 s3 o& W                &ei,
* b8 k3 _( D; i' i                &uiErr);
0 N, Q% v- R  H% c1 r: }6 M4 t2 ^5 W' j
        SysFreeString(topicStr);
* M6 h6 o. {! }& v: {# o        SysFreeString(itemStr);
8 d8 Q% ~) }7 E- M5 Z/ O        SysFreeString(valueStr);
2 L$ w2 r4 e+ P% }4 Z% z% E6 S% T% k
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
8 w% i( s7 n  P  t3 m# f& z2 e% O此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
/ U( w& ?- Z0 {) Z. s: h$ _* x! v4 G
7 }; \& o# s3 R. M( w; G: e
5 N8 D- m7 l; `2.这是request的程序
' t5 Z: E- V, i8 j, ?  d//  Request a value from Extend  [2 P  A! [; T- ?$ q3 k
//
# g8 z7 e( x' ?6 ~" O# }! q) `! h//        Initialize the variant that will hold the BSTR.  Set the variant's
/ K; N) y0 a8 F$ G. ~//        type flag to indicate the fact that this variant holds a BSTR. Place the
" t7 `+ e1 n5 ^9 c9 U% J//        BSTR into the variant structure.
# r+ w9 F1 E' H; C' e0 ~4 A4 x/ [& |+ G/ G
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
* C, j* v, N: t" A+ z! V/ w' \0 X       
1 w5 d8 w  w5 L1 F: O         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
; z2 S; |- Y# ~. W% F6 {2 ^; c# N        VariantInit(&requestVariant[0]); : [/ J$ i- x/ }/ B3 b0 Z% V/ O) g
        requestVariant[0].vt                 = VT_BSTR;
, S" F# C) {5 s. B+ Q        requestVariant[0].bstrVal         = itemStr;
( v0 D" Q: e, f- z) ~: H/ n7 q! ]/ t! q2 ?/ G" m
          topicStr                                         = SysAllocString((WCHAR *) L"system");, b1 n5 d1 X" L, w, @# h% T) _5 U
        VariantInit(&requestVariant[1]);
2 e$ F; J4 ^# t: g% A        requestVariant[1].vt                 = VT_BSTR;0 I% I! Z1 S+ x' ^! J1 S
        requestVariant[1].bstrVal         = topicStr;
8 H7 }9 a  F& ]6 ?; ]) r$ J" w/ w
//        Set the DISPPARAMS structure that holds the variant.8 [. t1 O0 M& G* n2 [1 r; _9 P
6 q' D9 M) A& a& }% b
        dp2.rgvarg                                         = requestVariant;
! p' D/ V/ i4 K0 z& b        dp2.cArgs                                         = 2;
1 }$ O8 W( y2 b, Q6 N. x4 O        dp2.rgdispidNamedArgs                 = NULL;" Z0 P- d% l6 X& N3 f+ k
        dp2.cNamedArgs                                 = 0;( J) M% w5 a$ o; z9 N" y; f; ]

; V( ]' ~6 W: [         var.vt = VT_EMPTY;( I! ~; h) V( [
0 c  S# M& {$ H1 e! J8 k0 Z
//        Call IDispatch::Invoke()* ?' `) I' o0 O1 Z" y

( J$ J' X( Y& ^% t0 x1 c) H- F  I        hr = m_pDisp->Invoke($ Z" I8 Z( q# B" s3 b7 w
                requestID,- P9 m0 e9 h' [3 y
                IID_NULL,2 J' B  l5 X: i9 R$ C- _3 ~% H
                LOCALE_SYSTEM_DEFAULT,
4 u2 t1 G7 P6 l8 a# @( ]5 o  V: }                DISPATCH_METHOD,
7 t* J# D' b. D  Z7 W. h; O                &dp2,# f* k4 i6 o) R- a2 e4 y& d
                &var,/ x, b: m/ l% U1 g" V
                &ei,) F7 s& \4 O) E3 Y' f
                &uiErr);% d" s/ @/ \2 r9 f+ i$ @
6 P. m$ F6 j# A
        SysFreeString(topicStr);
& O  L. ?3 L5 g% i; Q1 ?        SysFreeString(itemStr);. B$ Y& o* T) V. y8 X' Q; j4 R
请问该程序是获得extend里面的哪个值?" `3 k& R' R- ]$ u4 J. O
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-7-7 17:21 , Processed in 0.011971 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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