设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9719|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:, |$ g$ c* i* j* n4 ~
Name = (WCHAR *) L"Poke";3 u( Q' U$ Y5 f* s
                 ; w$ a5 x+ I! N* V: B- s
        hr = m_pDisp->GetIDsOfNames (
2 ^4 `7 h1 h  B# ^, v# g" E1 K" z                IID_NULL,                                // reserved
  r. w5 W- ^0 U6 @* \  O8 [                &Name,                                        // Array of names to get IDs for, X4 w/ O0 U2 W/ u
                1,                                        // # of names in the array& n* j) X) P" t/ I+ O9 e
                LOCALE_SYSTEM_DEFAULT,        // System locale
, y4 V3 M4 h3 u                &pokeID);                                // Array of IDs to fill on output' Y" ^$ y. M# V1 c! v
                        % v) P) H, e6 r5 N' T
        if (hr)
; w$ N: q. ~$ E. Z7 e: ~                {9 U. s2 w$ \& `8 l5 v- M/ G
                MessageBox ("Get Poke Unsuccessful");0 i; \9 W/ i$ `! V8 A1 X2 t
                return;! @+ ]6 X/ V5 V0 z, O  Z, F& ~
                }: q6 `1 W8 b: ~# W# f

( ]3 r! J$ D6 C: }) a" N/**************************传递数据给extend**************************************/2 D! r/ O/ y/ f5 ?0 |0 C
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);( z, n3 `! m1 x
        0 H+ B& I+ }8 E6 h
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
: y; s9 h% H$ G8 {1 \        VariantInit(&pokeVariant[0]); 8 K; z' N8 o" \+ T7 \5 a3 h
        pokeVariant[0].vt                 = VT_BSTR;
9 o* h8 }' L2 ^- u& P        pokeVariant[0].bstrVal         = valueStr;
+ f+ A- {/ q* X; C! O
2 \- {5 Q! o6 [         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");' B& x& S. m6 e5 o* p) J
        VariantInit(&pokeVariant[1]);
) d/ C5 b& Z2 o5 V/ I: o( Y: ^. h. u        pokeVariant[1].vt                 = VT_BSTR;2 n5 ]0 m3 I% {( T/ b6 a: [" X4 d
        pokeVariant[1].bstrVal         = itemStr;0 }2 ~' g; c' |: Y" x4 o

; I3 C/ [$ y' t% z/ |          topicStr                                 = SysAllocString((WCHAR *) L"system");
1 q; Z) w1 {) K# S' a1 z- T        VariantInit(&pokeVariant[2]);
' ]- B0 E3 {; d; k0 M  k/ T" Y        pokeVariant[2].vt                 = VT_BSTR;  x2 a' h% o6 d6 V8 B4 l
        pokeVariant[2].bstrVal         = topicStr;
1 d: j( d! |0 P& K
6 t& k1 W  \8 Z* w//        Set the DISPPARAMS structure that holds the variant.
0 J; U* H! y  \8 ?# J) ~
$ c3 b0 M- e8 F$ A5 M7 ^6 ?% d" X        dp.rgvarg                                         = pokeVariant;+ X; _! M; S& K; k" C) t
        dp.cArgs                                         = 3;
  O9 G+ d# C- ?1 k        dp.rgdispidNamedArgs                 = NULL;* r, I" I0 ?& h1 ?! o
        dp.cNamedArgs                                 = 0;
0 v8 m$ J+ E" f8 a8 X' C5 P% k: P- Z$ U1 J6 z6 D
//        Call IDispatch::Invoke()* e3 {/ s$ m5 M6 U" c$ i. d2 S
5 u: V/ \) X) V" S4 Z/ K
        hr = m_pDisp->Invoke(
3 f0 Q+ ], r* J: c, V# r                pokeID,; k1 k1 N1 G' u( d4 ~8 q, J5 x
                IID_NULL,: \5 Q0 b, A+ O6 P; g5 I+ A# N
                LOCALE_SYSTEM_DEFAULT,$ l! M) r/ T, `7 K; R0 B; I
                DISPATCH_METHOD,* W8 N) d& A# K+ f% W: h2 P" l
                &dp,
9 q" q8 J( V" V% D8 F# _; q: {% f                NULL,
- A' P  s$ Y7 M+ c2 }                &ei,
0 t  n0 t. _* ~                &uiErr);
% H1 F# }; ?6 ]! B5 K. {* U1 p$ ~6 L2 D- I+ v
        SysFreeString(topicStr);' J! [! C% {/ n
        SysFreeString(itemStr);1 E+ Q. h0 I, b- @2 {
        SysFreeString(valueStr);
  W# u/ @3 ?& J2 {" r5 L  [4 F9 k! o9 A& r
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
; g; g' t: \" O- k% q, _  {) h. M此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????2 x* O& R" `0 Y+ v+ I3 k1 O# _/ _
" I$ Y9 r+ @4 J) W7 K+ \

' u9 [8 J- w( ?2.这是request的程序
3 ~! J6 K7 T* R! `% w! ]//  Request a value from Extend# q- `9 j9 H; d7 d/ }8 N9 O% K' I
//+ D1 l$ A4 l/ @+ ?( H
//        Initialize the variant that will hold the BSTR.  Set the variant's
9 f' F9 ?+ [* w7 {//        type flag to indicate the fact that this variant holds a BSTR. Place the
8 l% i- h! l; H" E) I% T+ Z" y//        BSTR into the variant structure.8 w8 g/ F: ^9 s# X

  D0 c3 C3 X9 t8 C4 ^        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
6 b' ], P5 p: f1 W- L        : D" R1 }* P/ r
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");, M0 q' C# S8 t3 R1 }5 [7 {7 s
        VariantInit(&requestVariant[0]); 8 j9 e; `, w- S% Q& z/ x
        requestVariant[0].vt                 = VT_BSTR;; ~$ n# u# R  l+ N8 B, [) s
        requestVariant[0].bstrVal         = itemStr;
2 t9 P9 ?9 G. J( W7 Z
3 Y' Y* z* o. p& W) M) }0 _          topicStr                                         = SysAllocString((WCHAR *) L"system");
: \4 {* s9 d# z; Q- d* R, p" |# D        VariantInit(&requestVariant[1]);   z% p6 l0 s; m8 g+ u
        requestVariant[1].vt                 = VT_BSTR;% p9 y6 ]3 I' b* \1 l
        requestVariant[1].bstrVal         = topicStr;( u9 a9 l1 g( D1 P3 n8 k

( r  A: \: x$ J9 l! d$ X//        Set the DISPPARAMS structure that holds the variant.
1 Y8 r. u4 d" ?5 M% j) h5 [' j1 r1 \' V. @
        dp2.rgvarg                                         = requestVariant;! @6 X6 Y* g- @+ r& d
        dp2.cArgs                                         = 2;3 x3 T$ t* N/ K' b. n
        dp2.rgdispidNamedArgs                 = NULL;
$ W" s& _2 n% F4 o+ C8 L( [( X8 ^        dp2.cNamedArgs                                 = 0;, E8 z4 z( b1 P5 V. B+ q

/ A+ r% N: C8 {. c: f5 u, L2 G         var.vt = VT_EMPTY;
' t  ^; p7 u, q. H9 [% _5 s0 f! E6 G# _; g" ~
//        Call IDispatch::Invoke(): h2 S5 i6 x5 R" O; a0 e
0 h1 C% Z! C5 e, O% v  c7 J
        hr = m_pDisp->Invoke(1 y# n9 D' O" `) R  {
                requestID,
* w( Q4 A* @; x2 x                IID_NULL,
9 s! `% v% v* s$ B) l+ Y                LOCALE_SYSTEM_DEFAULT,% l( c9 _& ?" A6 M
                DISPATCH_METHOD,4 z6 W- X, C. j$ C& ^
                &dp2,
% b8 |1 _. b2 w& y# I                &var,
' `: `$ S/ n3 n# P7 _  X3 @7 R                &ei,
  O; {  f: ^2 T( G* Y                &uiErr);2 O, K6 K( e- ]" v6 |

  D9 A% W7 J3 |& {9 P        SysFreeString(topicStr);$ j) [  u: O0 H
        SysFreeString(itemStr);: R5 Z. B: Z2 ?; S7 D: x( \3 S
请问该程序是获得extend里面的哪个值?
3 @( b& E4 z! s# j0 i1 l如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-4-27 15:30 , Processed in 0.014679 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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