设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10731|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
6 U% `- f/ f$ j3 q+ aName = (WCHAR *) L"Poke";5 L' {( p% b. v/ U. B
                 $ p/ S' Z: S5 a
        hr = m_pDisp->GetIDsOfNames (. q1 x; k+ O0 g8 N
                IID_NULL,                                // reserved! v# l' @# Y; ]8 u" c
                &Name,                                        // Array of names to get IDs for( O9 d& Y- y0 J0 G/ W4 j1 I
                1,                                        // # of names in the array
' F5 G8 [6 H3 h% |, i' q* E                LOCALE_SYSTEM_DEFAULT,        // System locale1 R  H8 @( U# u$ k% o7 J
                &pokeID);                                // Array of IDs to fill on output9 n; e0 y' m% d! K  K
                        8 q. c" n6 \4 K# O
        if (hr)
, O" c3 K7 @3 v# D; }# v                {- T: q; R, [4 E6 f% c- l: y+ x
                MessageBox ("Get Poke Unsuccessful");$ q6 S! [# b0 t( b
                return;8 E2 }+ F3 `" o& W% ?2 V7 t
                }  k9 g2 c% t# [- N

( n- s, J0 t7 b6 j. B7 |$ M; B/**************************传递数据给extend**************************************/
7 ]* V; n7 n8 Q) A8 e        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
; _3 G" E, o0 n7 e4 {5 u; I7 x       
$ o! G' ]8 V" t2 `" @: w         valueStr                                 = SysAllocString((WCHAR *) L"1232");
0 Z! z5 a: T( d0 F0 P. q. m        VariantInit(&pokeVariant[0]);
1 s1 ]1 a% D+ v( P        pokeVariant[0].vt                 = VT_BSTR;
3 ?. B/ e% q# j) G$ j        pokeVariant[0].bstrVal         = valueStr;# L' f. ?; \, V4 |9 Y' t* k

% J* x8 p( f7 D- e+ a         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");. ^. k+ U9 s& J/ o0 E  W
        VariantInit(&pokeVariant[1]);
; W& g7 X' r4 }' P" G: h& s        pokeVariant[1].vt                 = VT_BSTR;
% I6 U6 _- Q0 o9 L. t; @        pokeVariant[1].bstrVal         = itemStr;2 b9 S8 e# d1 ?7 a' I
, ]5 b# s$ d/ j# H; ~5 c9 w
          topicStr                                 = SysAllocString((WCHAR *) L"system");
& `# J: N6 I2 b+ O3 r" D        VariantInit(&pokeVariant[2]);
0 k1 v! D& z# ?) E. ]        pokeVariant[2].vt                 = VT_BSTR;
1 P) r3 U6 K9 k) R1 v6 ]0 Y        pokeVariant[2].bstrVal         = topicStr;
5 _, m6 P) z# L; O% b0 S+ D
- C- T/ }$ n7 G3 [) c# \- u. v& T5 M//        Set the DISPPARAMS structure that holds the variant., z. n2 y( b! c; Y2 m
% B  Y. u' Q# I: m( f; M
        dp.rgvarg                                         = pokeVariant;
9 p% Q# K+ x) n" {! U1 k3 Q0 i        dp.cArgs                                         = 3;! l3 ?' x9 V# W& X9 E# G# H& D7 f
        dp.rgdispidNamedArgs                 = NULL;. H, f# F% S. ~# r6 ^( W. A
        dp.cNamedArgs                                 = 0;" `( W& S! _- y4 U. c& Q

2 W. e+ v1 X. L0 s1 M1 M//        Call IDispatch::Invoke(). ?" e6 N: ^  o6 \; \

7 z/ S% ?( f# A- m3 L        hr = m_pDisp->Invoke(7 L3 C% _$ _# M
                pokeID,; L/ p& f' ^( s" Y
                IID_NULL,
7 l6 D4 c; [1 s/ a: I4 K% n                LOCALE_SYSTEM_DEFAULT,
' s6 m! Q3 F3 K" d& `' p                DISPATCH_METHOD,  j2 ?" \$ K9 Q
                &dp,/ p5 {; s! p' r3 o0 v, F! ~$ h
                NULL,
* K5 ?7 P; m. W2 f0 \5 C8 ~3 k- X5 g                &ei,4 E( K% e& o  }, m+ `7 g8 ?. e# z
                &uiErr);
6 V) O/ s8 {3 ^* a, u
, y6 \( H! K7 v; R        SysFreeString(topicStr);* X0 Z* h) n- X4 Y
        SysFreeString(itemStr);
+ n' ?" `) f( E8 l& [, d        SysFreeString(valueStr);, r( g* i2 E) q; g! g2 _

, X+ k4 T! u/ ]/ x- u, Q现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
" i; q1 D$ d8 R$ R5 T此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
1 X( Y. F( }) \2 E% p  R5 g* M7 u" z$ O. F+ y% E' v
. {7 d% e- A& O) @2 |; e1 H
2.这是request的程序
/ Y3 E. J7 T9 Y//  Request a value from Extend
6 Y( N, W4 q1 f0 t0 I- U2 e! h//5 @) H. u- u, I* ?# _5 ?" o$ y6 H& y
//        Initialize the variant that will hold the BSTR.  Set the variant's
6 r1 U' k5 X! ^( R/ Q//        type flag to indicate the fact that this variant holds a BSTR. Place the
  n" f9 E8 f1 L8 c( Y//        BSTR into the variant structure.! y/ A( f3 F6 e( O! H6 _

) Z3 ]* v3 H# }* p+ u8 d; F% v( B& q        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
$ B- P5 A! M5 Y% d+ s0 T       
2 d, R; K& ^2 a/ }% K         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");# |7 l, j5 X- O
        VariantInit(&requestVariant[0]); - _6 q. P1 c  ]$ X9 a8 g
        requestVariant[0].vt                 = VT_BSTR;
9 b' g- Z. S. V        requestVariant[0].bstrVal         = itemStr;+ f: e0 R; Q  M- ^8 c
: z: U; [, W! d" ?
          topicStr                                         = SysAllocString((WCHAR *) L"system");, c8 y' T) W$ D2 C9 e7 N
        VariantInit(&requestVariant[1]);
& l' ^0 h' x& T: W        requestVariant[1].vt                 = VT_BSTR;
( x2 u3 T) i/ j& ]) e7 l        requestVariant[1].bstrVal         = topicStr;2 l6 D; M  H3 ?
. }. P* {$ N" F$ C- t* [6 ~
//        Set the DISPPARAMS structure that holds the variant.
" m/ l8 M( d! b0 E. R7 [
1 T  u5 a: P/ n        dp2.rgvarg                                         = requestVariant;7 F' P5 u' J: l+ i; U* r. Y4 y
        dp2.cArgs                                         = 2;$ K% p+ \. x! v$ ^1 f4 _
        dp2.rgdispidNamedArgs                 = NULL;) J7 N  Y: A* v9 `/ p
        dp2.cNamedArgs                                 = 0;1 j' ?* g2 b5 e& g8 g

8 l: {9 p" X. e. a' g         var.vt = VT_EMPTY;( `( A3 ^  _( V* l- I

! v8 |3 G' y8 }( g: Y: F//        Call IDispatch::Invoke()7 C3 h1 }' K# S

% Y9 ^3 T8 g1 m# p9 X" |- ~) q( {, s        hr = m_pDisp->Invoke(
$ V9 W- v. B! x                requestID,1 M# o+ }' W0 O- I
                IID_NULL,
0 K/ D- m: x( H, A( J3 U                LOCALE_SYSTEM_DEFAULT,
0 h% m' w- I% f* n                DISPATCH_METHOD,
# o  ~( V) E9 k                &dp2,
) ?- I9 D: o* R/ r$ P. }                &var,
2 [5 @/ P7 J4 p* f+ y  g; J. ]                &ei,9 F) v) Y6 I; \. X: o
                &uiErr);
' K5 g. r4 @5 v9 D+ n; v1 ?( M0 Q: u% M2 _- u. Z- U' M
        SysFreeString(topicStr);
, [( o  o3 ], q+ [        SysFreeString(itemStr);& h  e0 g) x" A7 q' `
请问该程序是获得extend里面的哪个值?5 V4 `; U7 h) o( ^% E  `3 q
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-9 23:20 , Processed in 0.015067 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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