设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10166|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
) ^/ }9 E7 J; ]1 U- E9 t5 ~Name = (WCHAR *) L"Poke";3 ]7 h8 s( ]( e; x( Z; E6 p3 L
                
; j% r, l8 i) S        hr = m_pDisp->GetIDsOfNames (
# t3 @& a4 j& ~' @" n8 X                IID_NULL,                                // reserved
% w7 I3 a! U- g" t: O3 d  C" u( b                &Name,                                        // Array of names to get IDs for
8 U9 R. s3 W* P                1,                                        // # of names in the array8 \7 z( n+ f1 Q: M
                LOCALE_SYSTEM_DEFAULT,        // System locale
( E! V( L1 s4 G. i, F) Z7 I- U- ]. U                &pokeID);                                // Array of IDs to fill on output
6 X* y3 R+ X) n* `                       
- w6 a( P/ c7 C, @        if (hr)
2 Q( T7 T+ w) X' T6 {/ x                {
- W2 N+ k# T, X- {# Q6 |$ d                MessageBox ("Get Poke Unsuccessful");
7 \! _* l, w: x6 A0 M4 T                return;0 o' e- |* K7 M+ @
                }
/ w/ \+ s" o. ?6 P/ Q; v5 F4 `# R6 n+ S4 b$ [* m* q5 |8 H! r
/**************************传递数据给extend**************************************/! A$ U$ c2 d+ [3 `
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
6 e3 I3 g  I  x. s3 p       
# B) J3 T' `$ J         valueStr                                 = SysAllocString((WCHAR *) L"1232");
0 r, v' ?% O, M' a/ Q        VariantInit(&pokeVariant[0]); . W+ ^% h" Y- G3 N  `! E) T
        pokeVariant[0].vt                 = VT_BSTR;- y% j8 A- U( R: \* ^- J: x# {
        pokeVariant[0].bstrVal         = valueStr;# a' ~6 [1 r2 l& a
# p+ l: O; \5 j$ I. }, p" M
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
( k+ Q  J4 S/ ~" z        VariantInit(&pokeVariant[1]); ; T6 h9 e* H* l; e
        pokeVariant[1].vt                 = VT_BSTR;- n: v1 q' C, \7 `
        pokeVariant[1].bstrVal         = itemStr;) S1 F2 d5 E# f; F7 v8 @/ J
' F. N; S) l, e& g: s# e
          topicStr                                 = SysAllocString((WCHAR *) L"system");
5 H  J) X3 X0 w/ G& y: c* |        VariantInit(&pokeVariant[2]); # r" R+ K8 R2 H
        pokeVariant[2].vt                 = VT_BSTR;" q$ Q4 K, P9 E1 {6 y4 t" i
        pokeVariant[2].bstrVal         = topicStr;
2 u. U; c3 J7 H0 N5 j4 _% w
" P, G' d2 Z7 N) m+ Z5 ^" f  ^& W9 G//        Set the DISPPARAMS structure that holds the variant.5 k5 `; H/ B! z; Q

+ p9 ?4 d; ]( l- g1 C7 Z( i        dp.rgvarg                                         = pokeVariant;
+ k0 r1 p1 z! I$ h: R1 N        dp.cArgs                                         = 3;$ _! g6 L8 B1 d: D2 P) F6 J# X7 H# G
        dp.rgdispidNamedArgs                 = NULL;* W6 e" F- U; G  ^$ x
        dp.cNamedArgs                                 = 0;7 b0 J8 j+ r6 ~* h

$ `5 `- ^5 s( Z! L% J  B2 v//        Call IDispatch::Invoke()
* f- q3 Z9 S+ a, @) n" R4 |
: `2 h3 H) I0 {3 Y        hr = m_pDisp->Invoke(+ l; [6 H7 `, z" k* z0 K% V
                pokeID,
/ H0 P' z0 s& [! b' P6 w                IID_NULL,
1 w7 ]8 e+ _/ ^9 @  i* ?                LOCALE_SYSTEM_DEFAULT,; M  R% g4 w5 ^
                DISPATCH_METHOD,$ t4 [  f; X) |- n' @  H
                &dp,$ J0 s3 m: {) b
                NULL,/ E5 k) K7 O9 S" P
                &ei,
# w, O% i' D1 t/ o2 y: E- v                &uiErr);/ S$ G  h$ B8 a7 W( a7 v

% @8 k  U) L) E! k/ Z8 m        SysFreeString(topicStr);8 r# P- Y! A/ ~0 ]/ A0 W$ f4 N: O
        SysFreeString(itemStr);
2 T/ F1 o: h5 C. n' B3 v        SysFreeString(valueStr);3 @( K$ Q2 [. U: Q/ ]
* i5 }0 O- p8 l7 a, z5 ?8 A( t/ C  k5 |
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???! I8 v8 u" R& e
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????" g4 j3 ?! D* X' k7 B
. q7 S& c, S  k- h/ n8 i0 {- o& }

! v1 n3 f% q+ V9 B& P2.这是request的程序
2 G! i8 g+ W4 d6 q//  Request a value from Extend3 g$ i# x3 D1 W
//3 K) Q4 o( I8 R
//        Initialize the variant that will hold the BSTR.  Set the variant's
# O2 w& n6 T* Z0 L0 [//        type flag to indicate the fact that this variant holds a BSTR. Place the4 e! L' T- ^  N) o
//        BSTR into the variant structure.
  E: `) c  ]: ^
5 E! u: V, ~) A! w5 \9 k! ^        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
; L; b+ N. Q$ y6 y+ N        ( t; p  F$ [6 @9 z9 j3 ?' E
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");1 V+ J5 M+ H+ I
        VariantInit(&requestVariant[0]); 8 v; |$ m  i4 v4 Q# D$ h
        requestVariant[0].vt                 = VT_BSTR;
( n) M+ }- T( E* l        requestVariant[0].bstrVal         = itemStr;
/ j$ p% y, l% y2 B2 d; W# r/ b! K
+ x" {2 L  E2 Y+ N          topicStr                                         = SysAllocString((WCHAR *) L"system");
1 D& I6 Y( q9 j" G7 e# i2 R# C        VariantInit(&requestVariant[1]); 1 i# [& b- S' B( a& X: U9 p
        requestVariant[1].vt                 = VT_BSTR;
/ t$ n; K: I1 K        requestVariant[1].bstrVal         = topicStr;, C) H* C, e! n! Q. F

# Q# Y2 R5 j( M" q1 Y//        Set the DISPPARAMS structure that holds the variant.
3 I# H" ]3 U) S+ O9 H* u* `) T6 N
) r; x6 s; ~7 x9 ?. n        dp2.rgvarg                                         = requestVariant;
7 ?. u& S) S' S8 k9 z8 k9 s        dp2.cArgs                                         = 2;
  p$ r& x# \8 t$ G        dp2.rgdispidNamedArgs                 = NULL;
7 y- G( m1 m- G, U# z        dp2.cNamedArgs                                 = 0;
4 G# S, U, B  N7 h+ [* X1 B7 {6 @
0 A7 ~( {4 l( i         var.vt = VT_EMPTY;
1 p" o" k; ~8 @2 m  T8 g0 O. x: d1 H8 f' Q1 H- b% Q
//        Call IDispatch::Invoke()
7 c4 _$ t5 [4 k3 F) v- u; Z% w# D9 B
        hr = m_pDisp->Invoke(9 H/ }6 W- X' d4 K
                requestID,2 [7 v0 u+ O2 J, D
                IID_NULL,' h/ B( R3 W: ~0 \
                LOCALE_SYSTEM_DEFAULT,
5 q6 q& y" P: {9 T8 u                DISPATCH_METHOD,  B1 F; f1 A. }9 A- E1 ^
                &dp2,
) z1 e0 B& }9 i+ A                &var,
8 p% w# A# g% w4 D: u                &ei,
: i0 u& l8 Q) S  O4 r: E/ n$ p                &uiErr);
  M, U- D$ ?7 f
2 J4 x' y% N2 s. k! W% S% G8 V        SysFreeString(topicStr);
* B: b6 P. L0 v, Q4 E        SysFreeString(itemStr);1 P7 E- I6 f, n3 a! o8 |
请问该程序是获得extend里面的哪个值?
4 n2 H9 |, H% |: J如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-5-14 13:41 , Processed in 0.013320 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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