设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9444|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:7 n, N# e) l, [
Name = (WCHAR *) L"Poke";
' U! a+ @! I) C2 c: n/ m# w                
( q9 V4 e5 o6 ~* Z0 W7 O        hr = m_pDisp->GetIDsOfNames (
8 Y5 h7 ^1 y( f' }" _                IID_NULL,                                // reserved( g) b. x1 `4 c- L: u6 L+ B
                &Name,                                        // Array of names to get IDs for
: W+ e$ Z" [) z* l  q                1,                                        // # of names in the array+ R2 i* H  h( E7 h# ]% ^
                LOCALE_SYSTEM_DEFAULT,        // System locale
$ K% H: Q5 U  ]1 }: P                &pokeID);                                // Array of IDs to fill on output& U8 `6 v& G& F  e3 o. j
                        * l1 ~# ~8 e7 n/ U' m; l
        if (hr)
, t$ j) f: m" P* T                {
' g( G& @# w, k# t% w                MessageBox ("Get Poke Unsuccessful");; W- A9 F( J" o
                return;
3 G4 A( G- @' ]/ T: }                }
2 j& `7 }; l( n/ C- Y0 `( g/ W
! U5 G* [  y) J7 L; }/**************************传递数据给extend**************************************/
, c- m0 t( `' u7 q) s        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);# w( c" F) ?- M- h+ y
        7 t  ?& S( S6 J) p# s& D  p& O
        valueStr                                 = SysAllocString((WCHAR *) L"1232");) k* }6 ^+ _& Q, L' d! E" m
        VariantInit(&pokeVariant[0]);
8 u6 Y2 P0 n9 b# z7 f; V$ w' |        pokeVariant[0].vt                 = VT_BSTR;
3 f5 C4 [& j! k' t$ A/ ~: W  U        pokeVariant[0].bstrVal         = valueStr;
6 K3 O3 a4 M( @, H7 f  h7 R+ A/ O. O) q. x! R- J/ ]
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");) `& _! x- M# ^
        VariantInit(&pokeVariant[1]); 1 H7 t/ W+ _/ ~" c
        pokeVariant[1].vt                 = VT_BSTR;
3 X; c' A( i$ f+ J4 K) n9 t        pokeVariant[1].bstrVal         = itemStr;1 ~/ F, X  M) e+ m6 _
+ r, _0 ^5 d5 S7 U
          topicStr                                 = SysAllocString((WCHAR *) L"system");2 x2 s0 v" P! r2 D
        VariantInit(&pokeVariant[2]);
* U- W; z5 V6 {: R% A- w5 ^3 }$ u7 f  L        pokeVariant[2].vt                 = VT_BSTR;5 R% Q6 J9 W) _
        pokeVariant[2].bstrVal         = topicStr;: W7 N1 Q  C' A2 z3 t
% @- c! V# I$ b$ f7 _
//        Set the DISPPARAMS structure that holds the variant.
3 G: ~) p# M# G) z
/ M/ W3 G- P$ @# `: F0 X        dp.rgvarg                                         = pokeVariant;
  x) c6 F+ ~" p; u. m, R6 p        dp.cArgs                                         = 3;
# X2 U, N( V) J" h& X- h        dp.rgdispidNamedArgs                 = NULL;
0 i& W! \8 G6 {2 M        dp.cNamedArgs                                 = 0;/ f1 _+ z/ k; P$ Z1 R0 p: a
' u; f2 Y5 N8 S8 o( f+ s
//        Call IDispatch::Invoke()2 v$ p8 r8 Q* ~% R2 ~

0 W/ C0 i, Z7 n8 J: m        hr = m_pDisp->Invoke(1 F. J8 V6 n* g# r, z
                pokeID,4 g2 t% }+ k' V" e  D+ \# `
                IID_NULL,$ R" k4 s( Y9 z4 u
                LOCALE_SYSTEM_DEFAULT,: J1 [1 d) J) b
                DISPATCH_METHOD,' m' x7 h5 ?; P5 ^2 K
                &dp,. D. ]. D4 A- u! A  E
                NULL,6 J: y& V% o7 j6 J+ E0 U4 L7 a" p
                &ei,- s4 p2 f/ W: K
                &uiErr);
. Q5 `2 f+ J) O% V6 V# R- {6 ~9 w+ G" y: r2 i- L6 M2 A9 o
        SysFreeString(topicStr);* C4 Q+ Z. t+ d7 T, b
        SysFreeString(itemStr);
3 v7 B% j/ {1 F8 W, m; _6 D  u        SysFreeString(valueStr);( D7 d5 X4 c2 l, j- a
9 ~$ d( G/ y. D3 l1 A
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???" m+ j7 {0 H  O& |1 Y( O5 ]. S# G
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????2 p& ~6 ?* Z3 A1 z& [
3 ^2 e. l5 {' {  z) r( ~+ X* O
/ K  L. I( T' ^0 f3 Z9 a; R  r
2.这是request的程序
9 U# Z! e: m( D# O4 y) Q; s//  Request a value from Extend# v% S1 u1 M' G6 O( V5 n3 E# B2 Z
//# m( [0 r7 i4 s# O8 o
//        Initialize the variant that will hold the BSTR.  Set the variant's
) f# @0 C, B( w( n' `+ l//        type flag to indicate the fact that this variant holds a BSTR. Place the( E' G+ \3 I/ U. S8 K
//        BSTR into the variant structure.& F9 _* U. y/ C, j7 e4 C% H

2 I- n  v( F! ?9 J2 A8 G7 `" Z% l        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
' L# ?6 Z* D! A7 d4 S8 d       
( S2 D  t) Z2 }% D! y& p' T         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");+ \  D& n" h5 D7 H
        VariantInit(&requestVariant[0]); * W' y, e& Z0 S% [* P
        requestVariant[0].vt                 = VT_BSTR;
; I3 W0 ]" e& @" a; o        requestVariant[0].bstrVal         = itemStr;
* k; F7 k) C+ ~6 x$ t. L. B- y- W% D4 k) P. e# q
          topicStr                                         = SysAllocString((WCHAR *) L"system");7 ]0 n7 A  q) o+ j9 \) N) a( ?6 c
        VariantInit(&requestVariant[1]); / h) u" ?& t/ @& g5 i" a. r1 ?7 K
        requestVariant[1].vt                 = VT_BSTR;! m( H4 x( Z; ^# B# U5 h4 n
        requestVariant[1].bstrVal         = topicStr;
4 z5 O' T# }/ B- J/ Z* w3 A% F5 d& @2 ?* `) `
//        Set the DISPPARAMS structure that holds the variant.
% s4 j& L/ u3 o1 O8 k1 e1 ]6 ?) C$ C; f" ^
        dp2.rgvarg                                         = requestVariant;
. t8 X$ T5 t2 J. J4 u: D- a  t        dp2.cArgs                                         = 2;
: ~1 u. K# l8 g! [* d  f        dp2.rgdispidNamedArgs                 = NULL;
4 z5 C; {$ z' a" v4 B        dp2.cNamedArgs                                 = 0;- r0 i) C* `4 Q* `- k3 F
3 p* I2 E0 M9 p9 c/ l5 W
        var.vt = VT_EMPTY;1 A8 @3 a. }/ T

0 q' v) i5 h. X, O- f1 e//        Call IDispatch::Invoke()" _. `" L/ p2 s0 F  [! l2 W" E
" K1 P% s- J. Q
        hr = m_pDisp->Invoke(
% @+ J* G6 Z; @                requestID,7 U7 a7 g+ ~$ O6 [
                IID_NULL,
; L% r% N6 ^) J1 y% p& n                LOCALE_SYSTEM_DEFAULT,
  a. Z' \4 x2 p$ @1 o. K* l                DISPATCH_METHOD,
3 H4 n, a) Q' M9 r+ W# B) r                &dp2,& f$ p  N% A# G
                &var,+ ]3 }& Y3 m% G* Z
                &ei,( X8 K( x1 M" K7 \* j& }
                &uiErr);% d0 p% \8 x" z5 D
4 b. d1 Y8 @/ S0 C- x6 M/ A3 G, @! v
        SysFreeString(topicStr);3 g% ]. U& T* v; P0 {8 N! O* N1 L7 `4 Q& W
        SysFreeString(itemStr);4 s7 p# r* |% O$ w3 c
请问该程序是获得extend里面的哪个值?
; r* D& }% c8 a5 p0 s如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-4-18 01:19 , Processed in 0.013117 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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