设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12879|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:; @$ ]7 P' v0 ^3 B+ ]6 f
Name = (WCHAR *) L"Poke";- k6 N6 e" C# ^5 O9 c8 X
                 7 p: a4 q$ Y  t& {" P
        hr = m_pDisp->GetIDsOfNames (
" N; n4 R1 K3 M: e# |# W; K                IID_NULL,                                // reserved
& V0 k- w8 i) O) y8 F& U3 m                &Name,                                        // Array of names to get IDs for
2 f9 e& r- ?+ g, b                1,                                        // # of names in the array
1 B& ^# F6 v" j. W9 e1 W2 L2 [  _1 O" e                LOCALE_SYSTEM_DEFAULT,        // System locale& S8 h4 z$ \/ m, M% J
                &pokeID);                                // Array of IDs to fill on output
. M5 v: F2 Z1 n+ [$ W                       
  ~* ^; i% j! P- d- F. r) j( W        if (hr)
3 p7 p3 b- G- j$ h% R                {
- C& Z) d0 G. c' O! g, g6 i: W                MessageBox ("Get Poke Unsuccessful");
6 d9 K7 \  \5 Q8 x                return;
% v' `1 ?1 T! R                }: s; A3 K$ l; j% R0 Z

0 x3 C$ {( T7 N8 C/**************************传递数据给extend**************************************/, X  D# p3 a' }, n. y
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
& Q$ Z8 V. [7 i, x1 F& L) W  d. c2 ~: ^        ) t0 o; m3 J. `  M( T" U+ P9 T
        valueStr                                 = SysAllocString((WCHAR *) L"1232");- a4 C6 Q6 W7 K1 p+ T7 z) \5 ^4 ~
        VariantInit(&pokeVariant[0]);
3 p+ G2 y$ O5 g" e) o        pokeVariant[0].vt                 = VT_BSTR;
/ h4 a4 _. p2 B" |# c        pokeVariant[0].bstrVal         = valueStr;
+ y% f2 v/ f  @1 D, H$ ?
8 I( D+ G& f  G8 ?; \! t         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");! I: ~: a- [8 r$ y2 _7 @
        VariantInit(&pokeVariant[1]);
) w/ @  D! n! S! p* z( a        pokeVariant[1].vt                 = VT_BSTR;5 F% W0 W( v; E
        pokeVariant[1].bstrVal         = itemStr;
1 _5 X% N* u6 d. T3 E& Z1 m7 P; m/ [6 I
+ Y5 h7 j9 Q. ^7 ~, n' G          topicStr                                 = SysAllocString((WCHAR *) L"system");5 h: k, c5 O* T8 j' F0 A+ z
        VariantInit(&pokeVariant[2]); " U* `3 _7 ^6 |4 _; p
        pokeVariant[2].vt                 = VT_BSTR;
' ?4 k$ c! s3 C# [        pokeVariant[2].bstrVal         = topicStr;6 C9 H4 u' i: B
0 `, ]" C3 ]7 Y7 R6 I: h
//        Set the DISPPARAMS structure that holds the variant.
7 X; y$ M: |7 b2 D4 v  U4 T
! i8 A7 y" T8 k) @% v5 P  O0 T2 R        dp.rgvarg                                         = pokeVariant;
) U, q9 F$ r0 p9 F: g  b9 _: k        dp.cArgs                                         = 3;
7 ?% p% n. P# {3 _! A% t" M- S        dp.rgdispidNamedArgs                 = NULL;2 _' S' {  o( `! l- p
        dp.cNamedArgs                                 = 0;% Z! T$ d/ F3 N( j" ~; i

* r- s1 m6 i/ H/ M//        Call IDispatch::Invoke()3 f2 ~3 Z9 F1 [, a

$ l: C+ {' q1 \7 a9 X        hr = m_pDisp->Invoke(2 n4 O9 A: r  U# G- a
                pokeID,
' H3 u9 L# W$ }# g' x, g; I/ n                IID_NULL,
1 f8 M% A0 \7 X& O                LOCALE_SYSTEM_DEFAULT,
- j7 F& I1 P! S                DISPATCH_METHOD,
# K( t4 s' X" {: t% z! ~                &dp,
3 B+ ^+ w* t) P5 W5 P: D) _. A                NULL,
2 H( B0 ~0 `. D3 f3 J2 Q                &ei,0 h0 d- s3 g) T
                &uiErr);
$ y3 s* w1 v8 B& ^, B. K) s" q, O% j, h5 [/ M; ?
        SysFreeString(topicStr);4 |" \# z0 U2 A4 F+ V# \8 u. t
        SysFreeString(itemStr);
3 M' P1 ^" U: a/ H6 w7 ~        SysFreeString(valueStr);$ R# P, m' ?. f  n" S7 O* C& M
) t/ n2 b9 t2 @3 m, g( z; `- S
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
0 s1 C- @- o- d4 A此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
$ A! ^, l, M8 A) ]2 Q2 u$ e8 a+ \  B' k( H! X4 j
8 |: C6 G- M. V3 H
2.这是request的程序. ]" K' L* k/ E' @
//  Request a value from Extend2 }  q3 Q; b) l% b: ~
//3 A2 A( ~4 G/ k5 o
//        Initialize the variant that will hold the BSTR.  Set the variant's
' S! z' c4 e  S% o//        type flag to indicate the fact that this variant holds a BSTR. Place the+ w; n% K5 b/ k5 K
//        BSTR into the variant structure.( ?2 a8 j7 g0 z1 x3 B, U

. p, r+ G( r" E: p        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
9 W7 G- ]( e5 s0 n7 t/ g        " m. I7 m  h4 z7 [! M. C
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
! _# o+ I$ Y. y2 e- T* X4 G        VariantInit(&requestVariant[0]); 2 h: v' t: w$ _
        requestVariant[0].vt                 = VT_BSTR;
- X( P, _+ D2 y' u7 B( r9 q        requestVariant[0].bstrVal         = itemStr;
: N1 Z- u" X0 @8 L( s- R: a
; r! w! G. M2 p          topicStr                                         = SysAllocString((WCHAR *) L"system");
6 I2 [. z% }; b7 X3 ~! ?        VariantInit(&requestVariant[1]); & k( T& W- p( x$ w/ @
        requestVariant[1].vt                 = VT_BSTR;
' {" w2 g& Y) |" P        requestVariant[1].bstrVal         = topicStr;
2 m# D0 T* e. _4 V7 w4 P, [2 {1 k4 \/ q
//        Set the DISPPARAMS structure that holds the variant.
' g) g; _( i6 g5 b
3 [& O. N1 S* J# Q3 I        dp2.rgvarg                                         = requestVariant;
5 a* c) u2 f2 r" `5 M        dp2.cArgs                                         = 2;% A; ?3 c1 Z0 W1 g& L0 J& l. d
        dp2.rgdispidNamedArgs                 = NULL;4 ?3 m/ {* \5 E; C# h! r$ |" v
        dp2.cNamedArgs                                 = 0;5 T$ z; L, }2 x( n: y
- X+ l  P% D* d/ m
        var.vt = VT_EMPTY;
# o2 q7 c+ r4 d* t: \) {1 Q8 V! S/ o" T3 a+ P
//        Call IDispatch::Invoke()* S" U' U6 u6 V% _. a7 u$ k* f

4 |+ [' D$ N; P4 _        hr = m_pDisp->Invoke(
% O. a& |  v: y, H' P) T5 k                requestID,, ~4 S- d6 W* G2 ]
                IID_NULL,, L: Q1 I( v  p7 O
                LOCALE_SYSTEM_DEFAULT,
! K# M8 }/ r, V                DISPATCH_METHOD,! a3 L  q/ |- j
                &dp2,1 C8 Y7 [' Z8 K- |( P! x, T* ?8 O2 t
                &var,
4 B& O7 H) j& R& U" O- i( f1 N                &ei,
2 c" y3 i* y, b# }: U                &uiErr);
3 n+ O9 D  U  j# H9 l! C- g7 V
/ N  I6 a- t5 H' G# x+ E* j$ d1 m5 H        SysFreeString(topicStr);5 H! S0 _7 G6 H3 w3 S
        SysFreeString(itemStr);
- U/ b3 _* d6 G: ^  S请问该程序是获得extend里面的哪个值?' t( b8 S8 n: {# O: O7 [8 {
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-9-2 20:05 , Processed in 0.023036 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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