设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10170|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
7 k: F9 Z% U4 ?! r6 aName = (WCHAR *) L"Poke";7 @- p% O3 }5 q- X7 D5 j5 n5 r
                 ; H$ E. @3 C( k
        hr = m_pDisp->GetIDsOfNames (. p) P* g: G/ X+ X
                IID_NULL,                                // reserved
# X  v; n( E. `- ~: L3 p3 L                &Name,                                        // Array of names to get IDs for' V+ I+ E+ W! j" X+ N7 U5 Z; C' U
                1,                                        // # of names in the array
. o2 j) X$ _2 O9 C/ I2 y2 U                LOCALE_SYSTEM_DEFAULT,        // System locale( f4 [! m9 s' U1 W) O! w' G
                &pokeID);                                // Array of IDs to fill on output* T  f& g' v- h2 {
                        4 w0 F! ~/ |% M! ~' a
        if (hr)
1 ?% t! I$ O! w4 o                {
# p$ H, C* L  @% H& |6 f$ z: F9 u7 `                MessageBox ("Get Poke Unsuccessful");
! I* Y# k5 t8 l5 T. t' F                return;
: u5 N, ~/ m4 T6 I: I$ n                }
0 ]4 `# r9 F- |' V0 c/ Z+ Q
+ l' E1 c5 J* x% F# m9 B/**************************传递数据给extend**************************************/
! F( k! e1 N/ x9 L        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);2 ?# e& }8 U. g" a! R
       
( n2 z& t3 G) c+ U+ \9 \: i         valueStr                                 = SysAllocString((WCHAR *) L"1232");
0 q: `9 `) h+ j& R* N5 x& d3 B! O        VariantInit(&pokeVariant[0]); ; q9 M5 }: {7 K$ E6 r2 p/ k0 I8 U
        pokeVariant[0].vt                 = VT_BSTR;
6 V4 e0 W. j' X2 Q- d3 B: \. D        pokeVariant[0].bstrVal         = valueStr;5 `. M1 B. ]. k  @; U

9 `- ?$ E4 [5 Q2 B( A" b* ~         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
+ R6 u" n9 f) G6 X5 i$ a. E        VariantInit(&pokeVariant[1]); ; [; O2 t3 A3 A" D
        pokeVariant[1].vt                 = VT_BSTR;
4 Y" b# W) g7 X& m) M        pokeVariant[1].bstrVal         = itemStr;
. z' s  `  C7 A- @' y, J  |+ P6 N8 g, T9 R* ~; p3 M  b
          topicStr                                 = SysAllocString((WCHAR *) L"system");
3 G3 P0 K. w8 A9 ?8 w% _        VariantInit(&pokeVariant[2]);
3 Q. v. T" d4 d" f; c6 G+ ^        pokeVariant[2].vt                 = VT_BSTR;
, q; v; z; s: C8 c# b        pokeVariant[2].bstrVal         = topicStr;
  }# {7 O4 F5 G- M
8 f" `/ g" m0 L3 c# k//        Set the DISPPARAMS structure that holds the variant.
& S, K/ U- ?, c. v4 J! A6 J, j. A- A+ [- O
        dp.rgvarg                                         = pokeVariant;
' u# P4 N3 J8 {% P        dp.cArgs                                         = 3;; D9 `: l; e; g* Y' X8 ]$ \
        dp.rgdispidNamedArgs                 = NULL;7 m7 r$ P4 S4 a' F& _5 r" Z
        dp.cNamedArgs                                 = 0;
' u) a7 K, A1 J, G% @' V  E8 W! ^& w( y0 P
//        Call IDispatch::Invoke()+ b7 X1 y4 H# U' N! X$ a0 L# w
' L! G3 C, N0 I. D; O  f
        hr = m_pDisp->Invoke(
9 K3 Y4 x. H, A7 k: S! N. w                pokeID,
6 d, |& r) ^4 N                IID_NULL,  d2 r5 N, Q* a$ B5 p' Z( P
                LOCALE_SYSTEM_DEFAULT,% E) Y$ U# e9 ?! J1 J# U
                DISPATCH_METHOD,& D5 x0 \) M5 G' Y
                &dp,# S1 ?: P& v" X* K2 S1 F
                NULL,
, l) P3 e, `  ]# ?' b, }                &ei," M( M9 n4 ]+ K& i( g2 e3 N4 `
                &uiErr);
! q& |/ ]% H; u0 L4 i; l; R( Q; {- R) r' E7 b, r6 D
        SysFreeString(topicStr);
  {  g0 `- L  ]9 N6 q8 r        SysFreeString(itemStr);' u8 C$ s/ C) z# ~* L7 \6 \
        SysFreeString(valueStr);
7 O: u. {; Z9 A9 f" s8 ~2 p. V1 X
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???- V% V  j0 F: z' q* {# M
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
. M5 D4 p' Q# A; a# s: {  q$ m' N- ^( d

0 g: B. P. ]% F* X2.这是request的程序
: z+ @, z5 p8 f; o* g( [//  Request a value from Extend
# _1 Z7 g$ _) X$ H//9 W7 s* d  b0 G
//        Initialize the variant that will hold the BSTR.  Set the variant's
2 c2 z. A1 d2 V! G, v+ H//        type flag to indicate the fact that this variant holds a BSTR. Place the/ s2 ^) H1 v( Y" r7 [; A, Y8 f% a1 d- H
//        BSTR into the variant structure.
$ g& i9 n. D) F. p; A, m" @( Y0 V0 E: i
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
8 Z2 M* u' B% F        / e! z- L# S5 @; K
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");. A' @" d# u6 E3 r
        VariantInit(&requestVariant[0]); . g2 G4 |; `+ m  @% w; E7 {& R
        requestVariant[0].vt                 = VT_BSTR;3 {0 ^& R& [9 j: {/ j1 N3 @
        requestVariant[0].bstrVal         = itemStr;
6 \, f3 \4 ]. Q2 D$ p
' L3 ]1 S8 {( w& H( K6 |          topicStr                                         = SysAllocString((WCHAR *) L"system");
' K. N6 D- W# f, i        VariantInit(&requestVariant[1]);
" K; t/ ]  V2 b& `8 L7 A) F        requestVariant[1].vt                 = VT_BSTR;
. _" ]3 W& [) P- l9 J3 Y( u        requestVariant[1].bstrVal         = topicStr;
3 ]3 u0 C/ H  P1 e3 l4 }! u
, E2 O& O, v/ b! J: o2 D9 ?6 p//        Set the DISPPARAMS structure that holds the variant.
$ {" z8 ?7 S" n3 p, F$ z9 T) _. x
$ T* ?4 h+ f4 j+ I" h        dp2.rgvarg                                         = requestVariant;
! P5 i- z3 f0 ^' P+ w- ~6 Q        dp2.cArgs                                         = 2;
# d* z. A' w  V& x0 n4 Z( `; l        dp2.rgdispidNamedArgs                 = NULL;: {6 ?  o, m1 y+ a8 S  f% M
        dp2.cNamedArgs                                 = 0;
- D7 J2 Q+ S% R
# Q" |" w7 A; o$ R6 S$ C- H         var.vt = VT_EMPTY;
6 B) [0 J& @1 r6 p% j( L1 ]( W! u1 A5 g8 S8 F
//        Call IDispatch::Invoke()* d8 l. f* I" [. b) a* C; @

6 @% H. n' J; S4 M9 r) k' v        hr = m_pDisp->Invoke(
# h- u+ {4 V8 ~6 Z                requestID,9 E. g0 K( T" t% ?7 G
                IID_NULL,
* e$ P% @9 _+ g) Z, j) y                LOCALE_SYSTEM_DEFAULT,4 p$ b4 |' V# G5 i
                DISPATCH_METHOD,1 b4 @4 v6 [3 ^8 v
                &dp2,
7 F4 _0 @7 V7 }$ o* C5 l                &var,
& J. V, O! B0 B. ]' \                &ei,  V) E; N4 S6 C
                &uiErr);& V7 |5 K9 ?7 }

$ G2 g. R/ ^2 l# p  r, J        SysFreeString(topicStr);
4 G  ~1 S2 ]% t: ^6 @" m        SysFreeString(itemStr);* K. T/ F7 N$ R8 H
请问该程序是获得extend里面的哪个值?
/ H+ f1 G  k/ p9 v2 L  f; i如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-14 15:03 , Processed in 0.014498 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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