设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11107|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
" P3 d6 X" \) B0 I+ GName = (WCHAR *) L"Poke";
1 ~3 n; x6 [. c* }# ~. Y- T# \                
  E7 L7 `0 q8 a& b& @% i        hr = m_pDisp->GetIDsOfNames (2 w6 @- M- g5 p, S
                IID_NULL,                                // reserved8 a4 e; P" D9 C) [! m# U3 a
                &Name,                                        // Array of names to get IDs for/ a3 A9 F5 G. V  _9 f
                1,                                        // # of names in the array; p" l' d( b/ R2 ~& i; }3 n9 [
                LOCALE_SYSTEM_DEFAULT,        // System locale
  R& `6 C+ `# m8 A# A                &pokeID);                                // Array of IDs to fill on output4 n3 H& R: f- f$ @
                        1 p% O& L1 f+ C3 U9 O
        if (hr)
* R6 x; r! s& J0 e6 U, t1 @                {
6 K) n% k+ ^1 X6 d                MessageBox ("Get Poke Unsuccessful");
$ }. r4 |& l6 e( [! G; f                return;
8 L5 @/ H1 v* V! Y. o, z                }
0 X/ V% L8 i" U% M3 D: q  k: X0 t( p
/**************************传递数据给extend**************************************/
6 g9 Y9 D* d' t5 i* j9 s* |! i        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);7 k5 J8 g) i" P6 s1 x
        5 d. e) h" ]& o2 n  g; a
        valueStr                                 = SysAllocString((WCHAR *) L"1232");( P3 j3 q6 R. f8 I' O
        VariantInit(&pokeVariant[0]); * ]. v: O6 o8 f
        pokeVariant[0].vt                 = VT_BSTR;' ]' j# m4 O# l
        pokeVariant[0].bstrVal         = valueStr;# |; `- \% v# m. W
, }/ N3 r- V  ]; S: _
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");) t* O0 g9 u8 Z, M" y+ }. F% @
        VariantInit(&pokeVariant[1]);
/ W: N; L  K0 X5 G) P2 e4 ~( c        pokeVariant[1].vt                 = VT_BSTR;+ N9 m7 V- k0 W1 `0 i7 `
        pokeVariant[1].bstrVal         = itemStr;
) T& Q, ~1 n9 w0 F
8 |' U+ i% y0 e          topicStr                                 = SysAllocString((WCHAR *) L"system");- S0 g# r6 h- W
        VariantInit(&pokeVariant[2]); : E6 w6 J1 |1 t8 ]  q
        pokeVariant[2].vt                 = VT_BSTR;
6 p; h/ u6 A9 x' r        pokeVariant[2].bstrVal         = topicStr;8 m. o. g! D5 t; T/ V

! |+ C' U; K6 U! X) L//        Set the DISPPARAMS structure that holds the variant.2 O9 a5 ^8 E& G* J% P
, b, ?, @/ e" r) B: h5 I9 D; ^
        dp.rgvarg                                         = pokeVariant;
& w& l( g0 y2 B4 W) e        dp.cArgs                                         = 3;# P# i! M9 D3 q- G% z
        dp.rgdispidNamedArgs                 = NULL;" i  C; R, z6 h* `
        dp.cNamedArgs                                 = 0;
8 {, a9 x0 G' h/ L* L8 E: l, E0 G! e1 S7 n9 s
//        Call IDispatch::Invoke()
/ I$ Z  Z2 M  k$ u+ v; @7 e! k
1 \3 {' T) f% U! Q0 _  O        hr = m_pDisp->Invoke(8 X# s6 r, d- G3 `% P
                pokeID,
' z2 G+ _# |! Z# H                IID_NULL,# O: `* a( \; w' b
                LOCALE_SYSTEM_DEFAULT,
/ K0 _% b- f- H. w                DISPATCH_METHOD,8 s, J' f& Q4 t4 H5 Q
                &dp,
/ V3 u$ Q  s) m8 Z8 T# B! f& f                NULL,7 t5 n" t7 k3 A7 l5 @
                &ei,
8 P0 T2 G4 _  ?$ x4 N5 b                &uiErr);4 h& N: u) {) y$ H. E- C4 g

. H# U' z! H% a3 D! L4 G) x3 l        SysFreeString(topicStr);/ C: _' ^  ~+ v  P
        SysFreeString(itemStr);, j. E* a( O% h9 B; _2 P- |$ V
        SysFreeString(valueStr);: m1 k" Q7 c, D0 y' r

9 k; a0 A! }$ O/ J0 s8 U现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
( j7 [3 C( s' e0 P4 V5 _+ z此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
, m/ K- c* v) n. f) A* T$ [3 w! p- i, F  P
# k; f2 s' w6 o  e6 ]* a' L! _
2.这是request的程序
: @: W  Z/ h9 }! _. I( O//  Request a value from Extend
+ q$ r9 H! m) P! F( T! Q//2 B0 v/ K5 i' d- S3 s! B
//        Initialize the variant that will hold the BSTR.  Set the variant's! L3 B9 y5 k1 i0 }- a
//        type flag to indicate the fact that this variant holds a BSTR. Place the% C" ?; U7 r6 t1 _8 e0 V" K% W
//        BSTR into the variant structure.  v  g' ]; L/ h6 U1 Y

+ K  y  T3 o- F8 v        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
7 u' h" x  k6 E0 G( f* L7 M2 H( n        0 c$ E* o7 D* A) z5 O
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");% g' @/ u& \! V
        VariantInit(&requestVariant[0]); # r, x$ s8 w' n8 F5 |
        requestVariant[0].vt                 = VT_BSTR;
/ F( s# ?' }9 J        requestVariant[0].bstrVal         = itemStr;$ F1 H" J/ n2 w# z" P
/ B* }2 e9 E0 `! q0 s1 M* V/ Y
          topicStr                                         = SysAllocString((WCHAR *) L"system");2 R# x) O/ c0 v# b- O' W
        VariantInit(&requestVariant[1]);
6 P1 q4 g/ b% U4 y4 {# X0 t        requestVariant[1].vt                 = VT_BSTR;
% P3 }, b; d# X  u9 C/ M        requestVariant[1].bstrVal         = topicStr;
& l% D4 p% G5 i4 H% B  c+ Z$ f. V2 G" I* @+ V6 A* h$ |
//        Set the DISPPARAMS structure that holds the variant.2 A7 C8 ]2 D" I  W( K4 \
% w8 F( G( S7 u: A) ]
        dp2.rgvarg                                         = requestVariant;( h7 R: `3 ]" h5 u$ i
        dp2.cArgs                                         = 2;
# q$ h( k. e0 F% g5 O        dp2.rgdispidNamedArgs                 = NULL;
" }3 ^! b. D& d* v6 z        dp2.cNamedArgs                                 = 0;
( H9 y1 H; ^2 @" L
5 ^! R, ?0 l2 N! m; {5 X) _+ u         var.vt = VT_EMPTY;5 H! w5 H3 Q- t# c
5 R* V; Y3 j; T  U- H* p
//        Call IDispatch::Invoke()+ f& l) _) s3 ~
7 U- Z/ Y$ C- {! R, n6 @: z
        hr = m_pDisp->Invoke(6 f: l+ ?" d2 Q& O0 E1 p
                requestID,# I6 I9 H8 f; Y, H! m3 [5 J
                IID_NULL,7 O+ u+ B: M6 }) q, e
                LOCALE_SYSTEM_DEFAULT,8 v0 c$ f; W& z, ~( c6 {: F
                DISPATCH_METHOD,
$ L1 s5 }7 T; @, _1 d                &dp2,
8 \: |  P" @8 q2 X6 h                &var,
# E3 x7 i. o1 M* h9 j& ~                &ei,
5 ]8 C: l2 h9 V% d0 [                &uiErr);8 Z" y* d! U! V, D/ m3 I
& T$ R* I- c, p
        SysFreeString(topicStr);
% s* Y# v. ]% [4 d; w% [) c2 b+ v        SysFreeString(itemStr);
6 l! _' X! h: s7 V* [( @请问该程序是获得extend里面的哪个值?( Z4 h& ~+ Y5 L4 d3 `- f) K" s6 f
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-26 18:27 , Processed in 0.015298 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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