设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9856|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
( h7 e# p# Q6 B2 H* i. k9 P3 v  N5 bName = (WCHAR *) L"Poke";
4 W5 w- P  L2 R* i3 P  ]7 ^3 m                
, H1 l4 d! V& T# g        hr = m_pDisp->GetIDsOfNames (% T2 D! c+ P% a' a4 d. P
                IID_NULL,                                // reserved+ F1 D/ L: ?* ?1 z( C. v. N, m
                &Name,                                        // Array of names to get IDs for
; o; A2 j8 e# m& v9 L/ m                1,                                        // # of names in the array' @! j7 U* B+ ^" _
                LOCALE_SYSTEM_DEFAULT,        // System locale" o0 `9 g5 W+ s2 u+ u4 l: Q0 q
                &pokeID);                                // Array of IDs to fill on output& i( j  G. x% b) v- ~' t
                        ' P9 S& Z, Y% {/ v, W7 w
        if (hr)
6 Z$ O/ t* l8 i6 }8 D( s: \9 u                {
/ ~* u% x" A# M9 X0 a1 s) z) v) m                MessageBox ("Get Poke Unsuccessful");
2 i3 l3 S$ F- b0 C- G/ U! e. E5 r                return;% S% z) m# z. N( ]- W6 H
                }
% l5 n/ F6 b2 \; I% c9 d  Z& T% l/ x
/**************************传递数据给extend**************************************/: L! ~6 k* b. ~( L, E
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);( c5 v, v: e& G
        0 P9 f7 x, q! {0 I2 C) L1 {4 ~
        valueStr                                 = SysAllocString((WCHAR *) L"1232");; B- w! w( k- E% S& m) b
        VariantInit(&pokeVariant[0]); 2 Y1 }& y: v* a9 H9 [
        pokeVariant[0].vt                 = VT_BSTR;) z+ W' `6 z5 T# s7 H4 Q: S" {8 @
        pokeVariant[0].bstrVal         = valueStr;
  C$ q) e0 s, Q  }) j
# y5 s: K1 {( h& B" E; h% O. s         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");9 l6 S3 V9 C8 T& Y4 `
        VariantInit(&pokeVariant[1]); $ J7 c$ U- Z  T* p
        pokeVariant[1].vt                 = VT_BSTR;
6 a9 B2 U$ O3 z8 ?" Y5 l        pokeVariant[1].bstrVal         = itemStr;
& z5 w% {; t* t* T
- E+ h: }4 O& J; Y1 q          topicStr                                 = SysAllocString((WCHAR *) L"system");/ W) l0 m0 a. T
        VariantInit(&pokeVariant[2]); / o- w0 e& U" t# u# m# w% V! d5 R
        pokeVariant[2].vt                 = VT_BSTR;3 ?7 n2 X7 K/ A# T: k; o
        pokeVariant[2].bstrVal         = topicStr;8 W& T& o2 J& w# B  \, F* m; v2 T* n/ @
( B& z( Y- Q5 {  y% D
//        Set the DISPPARAMS structure that holds the variant.
5 q9 u5 }0 ~  i0 N* S0 _2 M: ^$ U# q* [9 f
        dp.rgvarg                                         = pokeVariant;8 J& Q& |; H+ H( _8 U' [
        dp.cArgs                                         = 3;
/ a! G) I( p" O7 v6 ]0 n+ D        dp.rgdispidNamedArgs                 = NULL;
* w* U$ P7 o9 e  k9 h$ T        dp.cNamedArgs                                 = 0;% {( s( r2 C/ K- S  H$ S* O$ p6 \2 @

9 e) x: ]1 [4 {) c& u2 {//        Call IDispatch::Invoke()1 V. Z8 g" @  }* k( j
- Q4 s. M# B4 z+ |9 F
        hr = m_pDisp->Invoke(6 H5 d* E8 k% u2 c
                pokeID,9 c% n( W; G7 E0 h
                IID_NULL,
0 a( O# m# M0 Y" V, w6 @. t9 M                LOCALE_SYSTEM_DEFAULT,6 M, }/ q* z* b& |" L
                DISPATCH_METHOD,
$ R$ Q: o+ A$ {                &dp,& \1 O) K: q/ O" y% p4 C
                NULL,
( y4 H, y: v) I                &ei,
$ V5 W& w" B0 i9 ^8 l0 H                &uiErr);$ z9 D* {+ c. M* z7 |  b5 O

* m; |+ m+ }' F9 L/ n+ ~8 Z0 ^        SysFreeString(topicStr);
6 O- y: S" Y# c8 T% _" c8 b        SysFreeString(itemStr);4 Q0 [4 g, j; t  @
        SysFreeString(valueStr);
/ p- s3 _/ u# R/ q* s9 J; R  [) D% w3 u. |, {" Y' l! ~! [% p$ [# }
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
) U: c* X' B. W( x此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????/ f4 ~; P4 J& z# c
" g, H7 v  R5 I* Z

  }  l, o3 I  [2.这是request的程序
. n/ y, T3 [  }2 h//  Request a value from Extend
4 d0 a+ b: D( `. C- h  y) V//9 G5 t7 k" e4 c* |
//        Initialize the variant that will hold the BSTR.  Set the variant's8 `8 Z& v4 k# p; o& B3 s: V+ w
//        type flag to indicate the fact that this variant holds a BSTR. Place the
; {9 j, N# Z1 p! x5 }4 L7 l//        BSTR into the variant structure.0 ?! e0 R# S6 B/ P, J

  u, H& ?- \9 @5 z        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);  l; z" S, }( W( S
        ) n9 q# g$ I; {  W
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
8 k/ _8 r* R; H) g- t* A        VariantInit(&requestVariant[0]); 9 S6 k# O7 U) r4 R
        requestVariant[0].vt                 = VT_BSTR;) o, M3 L0 L2 O8 y5 k. Y/ a
        requestVariant[0].bstrVal         = itemStr;
* g+ b& L: K+ d. G: j" a3 V! s' F) w5 V7 {
          topicStr                                         = SysAllocString((WCHAR *) L"system");+ J: @/ j3 m! l0 \8 m! ]5 |+ j# Q
        VariantInit(&requestVariant[1]);
" g% v7 m$ F/ W3 S0 {) d4 r        requestVariant[1].vt                 = VT_BSTR;
9 j: n& _2 L0 |; F* C% V        requestVariant[1].bstrVal         = topicStr;. o8 D: ^. y$ W# }) b+ }* h$ z

6 Q' F/ ]; E% B) I! P6 E//        Set the DISPPARAMS structure that holds the variant.
% ^" e3 N# m% O
# }" o- I6 [. l, c        dp2.rgvarg                                         = requestVariant;
/ y% _; F8 e) ^( L  Y- m        dp2.cArgs                                         = 2;1 T4 h2 }' o2 w& A" q4 r
        dp2.rgdispidNamedArgs                 = NULL;
3 A+ R! O+ C0 ~& `        dp2.cNamedArgs                                 = 0;
1 r5 G5 K# @- a9 K6 q  I- K. p$ u' h
        var.vt = VT_EMPTY;
$ R3 r/ B1 P# F7 M! u
2 k; S! e  q0 M6 A//        Call IDispatch::Invoke()
4 g" W$ ^8 w3 f. a
3 J4 \5 k; \! Y$ |        hr = m_pDisp->Invoke(
4 L4 k& B5 A% ]1 G" }! j                requestID,( T0 b+ H* m8 D0 X, r
                IID_NULL,
' n3 ]4 n9 J9 [- j0 m                LOCALE_SYSTEM_DEFAULT,& t+ X* B4 r" S5 {' ^
                DISPATCH_METHOD,
  V5 I& A* W- Y' _                &dp2,
4 Q$ y9 B8 y4 L% f4 x( [( u                &var,
$ t+ J" B" j& g/ F                &ei,
6 U1 T( W5 B- _1 ]! F3 K                &uiErr);
* o" n1 m  D, s, @  \" \+ D+ l) s' `
        SysFreeString(topicStr);( K' |8 A* J0 c) \) b+ D" M
        SysFreeString(itemStr);7 R5 S. [6 a3 p! x# j0 h+ V
请问该程序是获得extend里面的哪个值?0 \$ g9 O& ]: T  a/ G
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-2 15:27 , Processed in 0.014635 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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