设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11039|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
# ?4 C! u0 W) LName = (WCHAR *) L"Poke";, i  r/ P) b: |# M/ s
                 7 l+ E7 t1 n8 t) r" f
        hr = m_pDisp->GetIDsOfNames (, L5 \2 k3 b, H* g4 X
                IID_NULL,                                // reserved
  |$ s! C2 x9 G* @, Y7 r                &Name,                                        // Array of names to get IDs for
! y5 V) o* X! }2 J) J                1,                                        // # of names in the array
# ?' L, {5 ~+ ~9 m                LOCALE_SYSTEM_DEFAULT,        // System locale
  e  W5 c& v3 |1 ^5 p8 W, I                &pokeID);                                // Array of IDs to fill on output. o% v1 d7 H9 `! I, B& ]  S* A
                        - k8 Q% J. D9 n5 I
        if (hr)
/ e8 C9 L7 Q% U& ]7 M0 |6 v2 f: K                {
8 y, v& P: f7 o                MessageBox ("Get Poke Unsuccessful");
, v" q9 T+ {9 V0 i: [! m# f                return;( I+ U6 a3 T; M: W2 E
                }
$ ~3 d! w$ D% D* H8 }6 M" m' n
8 }" y/ B2 ~4 k7 Z/**************************传递数据给extend**************************************/
- T, s0 H8 F6 P( Y        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);' a) O8 w. v! }% w4 B% M
        ! e* E2 l6 ]( B* s, p
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
0 E% c$ T: G* M2 H        VariantInit(&pokeVariant[0]); 3 k( y$ p% k; ?3 ~! c1 d9 V
        pokeVariant[0].vt                 = VT_BSTR;8 M- P. {. Q$ m8 R
        pokeVariant[0].bstrVal         = valueStr;
% S0 }" A8 P' C: Y, s
8 G2 {1 N. t# Q0 L4 e( n, O0 w         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");1 @8 s5 O+ `) v( O3 U6 i
        VariantInit(&pokeVariant[1]); , \0 }6 ~. P$ l( [! `% j% V
        pokeVariant[1].vt                 = VT_BSTR;' O, _8 B7 \, h! u4 Q) [
        pokeVariant[1].bstrVal         = itemStr;5 r- W! o) e) l% |# z3 l/ X

- i2 \3 W( ~/ `. O. W4 j          topicStr                                 = SysAllocString((WCHAR *) L"system");
. {4 C8 v2 t) o- O. P% J( B* e+ u# X        VariantInit(&pokeVariant[2]);
3 ~% x% A# T' V2 D6 z6 F* `* k4 o        pokeVariant[2].vt                 = VT_BSTR;. A" E0 |- Q4 n, g) U
        pokeVariant[2].bstrVal         = topicStr;+ p8 N" }" [9 L4 j3 ~) P( I

- _$ X. p1 \' t$ B- ~2 x) J% U//        Set the DISPPARAMS structure that holds the variant., O( ~3 o  t/ `# W
. p; x. [5 D5 [* c& ], A9 A8 J- C
        dp.rgvarg                                         = pokeVariant;
: `$ q  z2 s, ]" i1 V/ E$ F+ ?        dp.cArgs                                         = 3;
) R' W. V3 d. j& B        dp.rgdispidNamedArgs                 = NULL;
3 v% A- U: Y5 }, k! T3 k" |        dp.cNamedArgs                                 = 0;1 V2 M! I1 c9 ~4 C; ~

0 w) A' a  k' x" I* W//        Call IDispatch::Invoke()* ]; e; W# f: O# R3 E
& `6 _, ]0 f6 l6 e9 w$ v7 V
        hr = m_pDisp->Invoke(6 Y- N* M" Y! v1 U0 u' q& V: |4 ]
                pokeID,
7 z# {, ^* E' Q% E- i                IID_NULL,
9 U0 i% j1 m/ [8 s' J                LOCALE_SYSTEM_DEFAULT,
8 o, b3 `) k( L. i8 s                DISPATCH_METHOD,& {5 ~5 a2 C( ?
                &dp,
# y4 @2 J' ]9 o- p' e                NULL,
9 J6 g' V- ]( ^- `7 h0 J! R7 X                &ei,
+ p" Y( h. @$ L- K7 W: T* U                &uiErr);" W& g9 `! v6 N8 w4 d; e

* t* T4 x* f! I" Y        SysFreeString(topicStr);( `& x0 p6 o5 v" `- W  E
        SysFreeString(itemStr);
' x5 ~+ w; K: H4 v* D        SysFreeString(valueStr);
) Q6 V* ]$ K$ ^
  |+ w, p# s# R3 @, M( G/ {$ g现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???% i/ ]* C& J7 r8 l6 r
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????1 T% ^: E/ t' P# e4 ]! z! s) B
; ^9 |0 L  A5 Y( w6 ?

# N" N: U- k& M7 |2 e2.这是request的程序
. h* {% H" ?9 m% d* u9 N//  Request a value from Extend
$ N6 R$ h& O/ R' U//
6 ~! W, O7 C4 O4 M9 t//        Initialize the variant that will hold the BSTR.  Set the variant's
& a# \$ z; C$ h! [0 |, q//        type flag to indicate the fact that this variant holds a BSTR. Place the8 A' ~, G  z8 e8 h
//        BSTR into the variant structure.
( M4 \; L& u0 ^+ H* m
3 |6 z' D/ e1 |        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
1 c3 J* e" Q: |% A, x$ w        5 J* E" r3 J& `5 _: g1 }! t$ V
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
" R: S5 k- ^# J        VariantInit(&requestVariant[0]);
# E+ m0 Q0 ]1 f        requestVariant[0].vt                 = VT_BSTR;
6 v, V# f& \$ U$ K+ `        requestVariant[0].bstrVal         = itemStr;
) w$ |/ F* ?8 u6 a5 Q8 ^: n. `1 f3 ?6 C
          topicStr                                         = SysAllocString((WCHAR *) L"system");
7 k. J( S5 J; M" o* e0 R5 ~        VariantInit(&requestVariant[1]); * i" X  G0 H$ m; T
        requestVariant[1].vt                 = VT_BSTR;
& e: d+ C- G1 j/ Q# s: p; l        requestVariant[1].bstrVal         = topicStr;
( q) c  e) F8 [: m* B
1 m' n! B7 l$ I; C* w* z% F: V//        Set the DISPPARAMS structure that holds the variant.
; i1 D; V$ \. n* M, c; u6 e
# t7 j9 K! s% g$ V: J9 Z        dp2.rgvarg                                         = requestVariant;3 T! T$ N. G- b% O0 p. |
        dp2.cArgs                                         = 2;
0 s/ V4 h4 g. h* k4 m        dp2.rgdispidNamedArgs                 = NULL;
7 i5 b( c$ q- I$ |' Y' R  t        dp2.cNamedArgs                                 = 0;
: {7 R0 a/ S# n9 J6 p$ ^: e. R) O: S9 I  D
        var.vt = VT_EMPTY;( Q# \- d& ^0 }8 p- G: P6 @
) k  J3 X, {0 \9 ?% J5 d
//        Call IDispatch::Invoke()' X* s$ X; F& @- P. R8 M
+ V, t. {( z; b' ]; f
        hr = m_pDisp->Invoke(" ^; \. L6 M1 f* H( h. j5 u
                requestID,. x6 L, T( m% D- E) x4 c' D
                IID_NULL,
% m- K, z! e2 s2 K+ @' x/ `                LOCALE_SYSTEM_DEFAULT,2 d, n+ A- q& S4 i" G+ G
                DISPATCH_METHOD,
5 y' s0 [% [2 r: a: j# d, A                &dp2,9 ~: n% u/ B( m, K! P1 I, h  R
                &var,& }% k- t1 p6 K- [
                &ei,
- _) e! H# \' y4 t( Y                &uiErr);8 B8 W, ~6 [* F
% q1 f" q$ \: N9 T: U5 l+ G' m/ ]
        SysFreeString(topicStr);8 q$ _7 w  ]' W9 _9 I
        SysFreeString(itemStr);( w; z  Q* b4 O" X) D* k* ^
请问该程序是获得extend里面的哪个值?
# z* A0 F$ `( O* ^4 z% A$ p如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-23 17:55 , Processed in 0.015211 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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