设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7764|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:. H, M$ O, N) w" |5 `2 M
Name = (WCHAR *) L"Poke";
) P; e+ ?1 T* ?+ b                 ! Y$ v" H$ W1 o7 O6 f, B* ~: @
        hr = m_pDisp->GetIDsOfNames (
3 w$ d, |- m) T' c4 O+ X                IID_NULL,                                // reserved2 Q) l" }" U4 p1 z, t8 d2 h9 m$ r
                &Name,                                        // Array of names to get IDs for. `# e0 n+ o# O5 v
                1,                                        // # of names in the array
  d. u& t" u. k; S                LOCALE_SYSTEM_DEFAULT,        // System locale
/ T+ @: c+ x/ D$ F                &pokeID);                                // Array of IDs to fill on output
; l5 ~; a3 p4 K" ^                       
! z0 B  K- Z: w) G2 Q, \* ^        if (hr)$ A* R5 [# I. O1 E
                {9 ]4 q/ |5 D) f8 h
                MessageBox ("Get Poke Unsuccessful");
( T3 S/ @- K- N1 Q: ^* T- L; y6 Q! S                return;
  J* j" J0 y3 L/ Q                }
. y8 S6 O2 J& b: C5 I$ y9 L' M, G# T* A1 \6 h  h$ d1 u& y
/**************************传递数据给extend**************************************/
  d3 v5 w/ q  `+ p: _$ K        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
; U/ `$ g( t" _1 p' t  I/ ]# T: y        ) c. c/ b1 g' r
        valueStr                                 = SysAllocString((WCHAR *) L"1232");5 N) }( `& C. \+ J# D7 b
        VariantInit(&pokeVariant[0]); ) j, l+ p" H# T" _+ A
        pokeVariant[0].vt                 = VT_BSTR;+ K/ A" d2 K9 v: @" X# F
        pokeVariant[0].bstrVal         = valueStr;8 @' N: d- k2 w

- w, P- D2 R3 T, t' l7 o4 J9 p# b         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");9 M5 o* V3 f4 e: V0 v5 L8 w
        VariantInit(&pokeVariant[1]);
" l& E! f* a% r! f        pokeVariant[1].vt                 = VT_BSTR;
6 o" p/ s' ]; F        pokeVariant[1].bstrVal         = itemStr;
9 e. }/ S1 e" `# ?" h  n) I+ u; @( @- s( H8 b( R
          topicStr                                 = SysAllocString((WCHAR *) L"system");; c  f+ R/ T; G
        VariantInit(&pokeVariant[2]); 5 P/ p" U- J3 l  k: @) Y4 D* O
        pokeVariant[2].vt                 = VT_BSTR;
" I3 |  [* q+ D" n* ?        pokeVariant[2].bstrVal         = topicStr;
: P& Q- E7 W) M( x" A  [( v) B0 m) U; M! `% K0 r: T1 r6 _5 D% m
//        Set the DISPPARAMS structure that holds the variant.) I# D1 Q  d7 f1 \% ~2 G
: v! [& M& s# N3 K
        dp.rgvarg                                         = pokeVariant;# f' a* [0 ]$ a$ w: a; r
        dp.cArgs                                         = 3;
4 [" R+ ~' [- _: i  t        dp.rgdispidNamedArgs                 = NULL;  T5 W( y9 [& [( w2 f
        dp.cNamedArgs                                 = 0;
; C3 B6 Q7 r7 Y5 z
/ y8 [4 h% U# I/ j# i& [//        Call IDispatch::Invoke()  H0 B8 B2 {( c* b/ M

9 I: K7 q5 b& L) b2 Z4 j( V( d        hr = m_pDisp->Invoke(
" X( s- L7 {( E! _5 ]                pokeID,* ~, J; e2 l8 f1 K. V  ^
                IID_NULL,
4 @9 M# O" E! t( K- w2 X                LOCALE_SYSTEM_DEFAULT,
2 u' d! ~/ n; R7 S                DISPATCH_METHOD,5 g, j( F4 u: D: E* `/ `1 f
                &dp,2 R8 ~# q2 h' g" l6 c" {
                NULL,1 j' ]% i: Q* X0 C  r6 ]9 P% o  R+ v
                &ei,
4 O- @3 r$ W9 I4 \/ P7 D                &uiErr);
# M  i+ {  }! p
4 ]+ a9 `' d( E0 x        SysFreeString(topicStr);
  ^3 v" h9 s; `0 H( K6 L2 Y4 a        SysFreeString(itemStr);
! e$ ?% k% L) O: b" c$ U7 o1 a        SysFreeString(valueStr);
$ @0 u4 [- q# e2 J# ^7 R) `
$ Z. _( g3 e! K( q6 `( R+ G5 u+ m现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
  l7 \/ Z6 ^# K此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????1 D1 t4 I  E& S7 i
; c! N( L5 U  ~; l' V8 d5 k0 x, `

0 y8 i: `5 Q  b1 B! x2.这是request的程序6 B4 y: ~2 \$ U" O1 L
//  Request a value from Extend) u3 a6 z, }5 V, L2 t
//
4 B( g# o. o. o3 F& Z) W( v8 U//        Initialize the variant that will hold the BSTR.  Set the variant's# q; ?, c* W* M! f. S9 n
//        type flag to indicate the fact that this variant holds a BSTR. Place the
9 @6 R) M& f: ]5 ~1 J4 ^//        BSTR into the variant structure.& @# u1 W; A. z! E% X
8 D* d8 \9 \* Q+ S. z: V
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
+ A5 n2 m- [% n# q7 N       
# @/ R5 o* X/ R9 B         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
$ E' K3 p% m3 a' W& \0 a        VariantInit(&requestVariant[0]);
, p' c6 U  V# L) S( u. S! ]& B        requestVariant[0].vt                 = VT_BSTR;
8 B5 ?3 h0 e0 k( U$ B8 D6 Z        requestVariant[0].bstrVal         = itemStr;. t/ b' S- t1 G( ^# C% A& E2 y! U
/ ^: A/ Z$ S/ q9 o5 c' t
          topicStr                                         = SysAllocString((WCHAR *) L"system");2 o' E/ p) p6 A" ~  L
        VariantInit(&requestVariant[1]); & f1 O0 O8 B8 |9 r
        requestVariant[1].vt                 = VT_BSTR;
/ ^' a8 S/ h* F        requestVariant[1].bstrVal         = topicStr;% m+ i) Z+ B- L
; e5 a/ o) g, P1 g. q' T
//        Set the DISPPARAMS structure that holds the variant., c8 O; O6 q# U4 ^! e
! G* V* H1 m6 `& N6 N
        dp2.rgvarg                                         = requestVariant;# D0 B, P, }; u7 X
        dp2.cArgs                                         = 2;
, x3 J9 h  {. S3 q        dp2.rgdispidNamedArgs                 = NULL;6 W' ^6 w; E8 t& c3 C1 S. n8 l
        dp2.cNamedArgs                                 = 0;) r) v! T& W, I! }6 t

7 E6 K4 O" d* h& A3 v: f8 a$ [         var.vt = VT_EMPTY;
1 n4 Q* y( I  Y! d4 _$ @0 _- T
. Q- y- K4 m* c; V$ [' M% ^0 Z2 S//        Call IDispatch::Invoke()( W0 \% G+ |" @' f
( k- \. r+ e, [3 A. ^' W* T7 `
        hr = m_pDisp->Invoke(/ ~8 C/ u8 W3 c$ f+ d
                requestID,0 k  E  Q$ D* ]. X+ F4 V* {
                IID_NULL,
! A3 V% h6 L3 Y" b3 l                LOCALE_SYSTEM_DEFAULT,& N3 {9 h9 N% n+ r' b6 }
                DISPATCH_METHOD,# B/ p3 ?. q6 J
                &dp2,( U) j! V3 R+ ]# S* ]# j
                &var,. }( X3 j6 f1 g# B$ A
                &ei,
0 Y4 g7 h) [2 x) @% D                &uiErr);
. k7 y3 g9 ^& s) e5 |4 W, r
# W& O! G2 x, M4 \        SysFreeString(topicStr);
8 Y' o+ Z3 u  L4 Q8 @/ d4 S; q        SysFreeString(itemStr);! X6 F, k$ o: a6 l
请问该程序是获得extend里面的哪个值?
* x# b% G5 X, O+ H# c+ `如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-2-1 21:03 , Processed in 0.018203 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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