设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7422|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
9 u8 y1 |5 y! t# i7 R8 C3 S! i; DName = (WCHAR *) L"Poke";
" K* V" X; u/ u$ B                
8 K( s" N  r  b5 X7 T        hr = m_pDisp->GetIDsOfNames (5 r7 v" o* C- l& d
                IID_NULL,                                // reserved, C6 X$ |' ~  _" L* X6 a
                &Name,                                        // Array of names to get IDs for
( Z5 D+ n1 ^8 P  R0 a                1,                                        // # of names in the array/ G! l% @$ h* e
                LOCALE_SYSTEM_DEFAULT,        // System locale
  v0 }4 N' l) Y# v4 _9 u5 k                &pokeID);                                // Array of IDs to fill on output$ `! N- r( b5 @/ e1 `# n# |: X
                        8 X; _; S. l0 [9 B
        if (hr)
( d# m4 X# y- f. U( n: X0 w                {
/ B4 [. H+ u! N6 P8 B* p$ q  ~6 b                MessageBox ("Get Poke Unsuccessful");  R2 M% I* q. ?2 D2 k' |
                return;
3 A: ^* T: l9 j5 r1 T# ?7 ~% \                }
( K, a; A7 |* r2 V4 v1 l4 _$ B2 W. b5 I
/**************************传递数据给extend**************************************/
- s, W& \' |- y; `$ d# a! k. I1 {% @        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
0 o; x3 J' F; m- m9 W1 C% P       
  e. t2 ]! f7 c* ^         valueStr                                 = SysAllocString((WCHAR *) L"1232");
, w3 @: I7 G2 {        VariantInit(&pokeVariant[0]); 3 T2 V$ r  B* a; c6 z6 y" |
        pokeVariant[0].vt                 = VT_BSTR;+ ^* M* @! _4 U3 c, ?$ q! ?
        pokeVariant[0].bstrVal         = valueStr;
: F( [# L3 F# H/ c7 c' ?
. g, h8 V+ r/ N/ h5 z/ p         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");% ~9 R/ ^& J% u- g& ?5 |7 C7 [
        VariantInit(&pokeVariant[1]);
3 U2 H4 G1 Q+ f9 {) y; ^        pokeVariant[1].vt                 = VT_BSTR;
+ i' G0 X0 {1 e, e  R6 ^1 y* b9 J: u        pokeVariant[1].bstrVal         = itemStr;
. g8 {4 L; G- S& A
. p6 c; n# v% `0 [1 [9 m          topicStr                                 = SysAllocString((WCHAR *) L"system");, V/ }  R- a# \- h7 I
        VariantInit(&pokeVariant[2]);   c2 k+ I: f& c% V( c
        pokeVariant[2].vt                 = VT_BSTR;
8 N( e' v4 Z2 C7 Y3 J1 R7 p        pokeVariant[2].bstrVal         = topicStr;
0 b* s+ N4 p$ r+ d% E1 y9 `0 j# B8 L/ b! y: o* x
//        Set the DISPPARAMS structure that holds the variant.
" N8 L( v7 F6 r8 A) L* k  n  f5 w# T- n8 j4 J
        dp.rgvarg                                         = pokeVariant;+ H3 ~) p6 v4 g" u
        dp.cArgs                                         = 3;
1 }3 A" }  u& a2 {6 B% @        dp.rgdispidNamedArgs                 = NULL;0 G: }  w) `5 y
        dp.cNamedArgs                                 = 0;- N. s9 A' m7 f; Q% |7 s

3 y8 f1 I$ n& Z0 G/ |6 N/ V//        Call IDispatch::Invoke()
% M! z5 g( W8 R: J; W. f
5 N! t; V: \$ B% Z- i! b+ {        hr = m_pDisp->Invoke(
# z: Z& ?; _$ p1 q% `& Q) Z3 L. s5 x                pokeID,1 b# K  k" t' r( E8 ~& l
                IID_NULL,
1 C1 x! k8 o3 e. P: K( J4 ~3 _3 q                LOCALE_SYSTEM_DEFAULT,
' V/ P  J) Q; s2 i. Z! h3 D- D6 ?6 `' ^                DISPATCH_METHOD,# i6 v. }: c& K) a( ]; F5 m
                &dp,& y2 ^- _2 U+ G+ S+ y2 U' Q( H
                NULL,: w; l3 Y9 R  S, m3 h! P
                &ei,
' }& {% v2 I. A  ~                &uiErr);
. H8 w/ ]. r) {, q" W1 B& f
& D& B- \1 C: [# _3 }0 m  J: U' l        SysFreeString(topicStr);) v- r. Q: m6 E7 t0 N) c3 g
        SysFreeString(itemStr);4 O+ a+ J6 O9 S# s- }  u
        SysFreeString(valueStr);. T$ d7 g% d' \5 {% y" G4 x

5 Z( T, Y; V) W" Q' G( h现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
  y; N1 O" j7 a) b' Y. X此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????" u  v! \3 w0 P: I3 n( q9 l
5 M5 E) o, a% u3 Y% v# ~$ o

8 w+ `" o! b  ~. r2.这是request的程序
; w$ M9 J- y% |/ G: U1 P: I9 Q4 ]. R//  Request a value from Extend
$ q" _: A$ X: B8 F, p: a$ K//
" V: M  Y: y3 U' R3 j6 k1 n//        Initialize the variant that will hold the BSTR.  Set the variant's
% ~! m$ C! e8 A3 r$ O//        type flag to indicate the fact that this variant holds a BSTR. Place the4 X" }7 d, \* {0 I9 H; A
//        BSTR into the variant structure.
6 n9 ?1 e0 r. S3 F% v6 Q% `
& T. D  q3 X, R% B% P" J1 Z        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
6 ~; }+ J/ o5 L: ^       
& E# S' _9 s: u         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");  x3 P" P# W2 W( ?' W
        VariantInit(&requestVariant[0]); 2 @' m8 r* E: N* K' N
        requestVariant[0].vt                 = VT_BSTR;- J" Y0 F8 B0 d- ~# e
        requestVariant[0].bstrVal         = itemStr;
# _8 J6 N3 r9 ?! i! K- n/ W
! q* @8 B$ T6 t; e  n) Q          topicStr                                         = SysAllocString((WCHAR *) L"system");
* p$ G$ {3 J4 ~/ q" U, j  C" |1 `: p        VariantInit(&requestVariant[1]);
- ^4 R% S" r* t/ W4 P        requestVariant[1].vt                 = VT_BSTR;
/ g& r7 q1 I- w5 |; I) U! b- Z        requestVariant[1].bstrVal         = topicStr;
8 y2 E* I, H8 R3 f9 |1 U) j8 F
//        Set the DISPPARAMS structure that holds the variant./ w$ W, _/ X, t  c2 N' t6 }

/ z$ G4 a* z+ G6 m' T( Z        dp2.rgvarg                                         = requestVariant;  [# ~5 R/ a7 V$ {1 z3 ^& y7 ?: ]
        dp2.cArgs                                         = 2;# {. n) f* }% C$ C3 f& a' y
        dp2.rgdispidNamedArgs                 = NULL;
/ _) B0 H. q6 N0 s. Z% U0 p        dp2.cNamedArgs                                 = 0;
# b0 T  @; O0 ^6 q/ X
  m0 A( H8 a% p7 f+ e         var.vt = VT_EMPTY;
; t, A* |; V4 Y! {: e+ f' l& I4 Q2 J4 |# f" K
//        Call IDispatch::Invoke()
' j* M# x2 P) y
0 Q% M9 U2 A2 X/ ?        hr = m_pDisp->Invoke(
' S6 Z" l0 j9 n3 l                requestID,# {5 X1 z2 P' W+ V  @! u+ Q/ X
                IID_NULL,) r  [& S+ p2 J
                LOCALE_SYSTEM_DEFAULT,- o, ]. ?. W7 t6 U! d) f
                DISPATCH_METHOD,
; N. k. a# w* _( O% Z# {. s4 s                &dp2,7 N$ B  a: H0 C6 j
                &var,9 ^5 M' w# K/ ^; U) M; p
                &ei,' i4 Z% Y5 Z' `4 E3 e
                &uiErr);! g& S7 B! q. f) ]4 m, c$ j

% ^6 T3 J' s# ?3 o" q        SysFreeString(topicStr);
) Z$ A/ l$ r3 e. a( q& J( [        SysFreeString(itemStr);
/ ?) N$ u" _1 v请问该程序是获得extend里面的哪个值?# y* [# r& G: N0 A- E
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-1-19 16:19 , Processed in 0.014607 second(s), 13 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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