设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9242|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:) s, A: W5 @) X- y
Name = (WCHAR *) L"Poke";8 y" |4 t& F6 Z  h- d1 ?) e; N- G$ z
                 ( q9 x' O; q% ?0 k2 f0 Z
        hr = m_pDisp->GetIDsOfNames (
* b- m5 |( x9 S% g5 M/ E. f+ ]- R                IID_NULL,                                // reserved$ Y( n1 [5 U5 o" G' S
                &Name,                                        // Array of names to get IDs for
) J. K! x4 J( e2 V! k7 @; H                1,                                        // # of names in the array/ i" y3 N0 L5 t- Z4 I& w& L" _
                LOCALE_SYSTEM_DEFAULT,        // System locale
! a+ {* Y( s# E1 d" `% I                &pokeID);                                // Array of IDs to fill on output
* h! v+ j. h5 a  o  `2 C                        6 Z6 e6 V# A/ M
        if (hr)5 _* g# o% q" Q& P
                {
. P, N% Z- ?3 E* C# y                MessageBox ("Get Poke Unsuccessful");
0 e* g; T0 x5 n) _                return;
8 [$ I" I" o7 k. z9 W$ }& G                }
8 v% c' y: M! C! t# n; T6 ?; H0 G/ A* p) A2 s4 q
/**************************传递数据给extend**************************************/7 b. S9 N# }% \( X0 m& l! ]3 q
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);; r& o6 {+ r+ M8 H. ]% {0 X1 Y
        " n; A$ F, |6 E* _' @
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
, T, b* `  e" z( l1 w        VariantInit(&pokeVariant[0]);
( [8 [4 J1 y' |$ e; V% j$ m; ?        pokeVariant[0].vt                 = VT_BSTR;* R, n% g0 C% {6 ^' z; D4 w: e
        pokeVariant[0].bstrVal         = valueStr;
* A7 Z7 L4 a# _1 n1 m* P6 h' T9 u7 }& C! A( K6 q0 C9 E
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
% T6 [* c6 C. W- S) r4 Y0 I/ u        VariantInit(&pokeVariant[1]); 6 N$ w  a/ g4 ?) Q
        pokeVariant[1].vt                 = VT_BSTR;' S8 F+ @; \, }( {: |3 O% k
        pokeVariant[1].bstrVal         = itemStr;
5 G+ E3 k/ Y/ [" F: O4 `, T' d" [) A
# _( t: Q" w- v( x          topicStr                                 = SysAllocString((WCHAR *) L"system");/ {& s- U) t( N# I7 {4 S' H1 H, h
        VariantInit(&pokeVariant[2]);
, t9 g+ Z1 c* J) E        pokeVariant[2].vt                 = VT_BSTR;# U2 f, ]4 i2 c: C8 C; x* q
        pokeVariant[2].bstrVal         = topicStr;& g" V* c  P6 X" \4 M; i5 [

& s* D" ]$ z; O( q$ e2 e( `* }//        Set the DISPPARAMS structure that holds the variant.
) C: B5 K; E; v' z$ o; \* J& v% v: W# F! J0 @/ b: D
        dp.rgvarg                                         = pokeVariant;
$ Z. [5 v  v* `# u        dp.cArgs                                         = 3;
& ?( _& Y5 K. J8 [+ i$ r        dp.rgdispidNamedArgs                 = NULL;
( g- p+ z% C4 W6 D, X        dp.cNamedArgs                                 = 0;; y9 @7 _8 ^7 U  x0 P. |2 h4 s

. K3 o1 d( B$ ]3 s# V2 y//        Call IDispatch::Invoke()
. l0 q6 y5 }. Y6 U! r" b$ h& c" d+ P
4 e; c/ |+ X1 P& r, O4 C        hr = m_pDisp->Invoke(
+ v, h4 R4 ^) N3 M                pokeID,
8 e" K0 x6 D, b# I( ]* i                IID_NULL,9 d/ B9 F- Q* L& w& U
                LOCALE_SYSTEM_DEFAULT,) t7 f8 X( H5 E6 V# g
                DISPATCH_METHOD,! T3 _' C0 u: d/ b3 o( z  ?
                &dp,& G1 q. A$ [1 W/ z7 f  c
                NULL,
% T+ z% v$ e! ~% _                &ei,( k' i# t- O7 D3 t: h) {# T
                &uiErr);
2 ]5 x7 Y) X) [1 w) v2 r& i- z1 W8 k% o2 c% X5 J
        SysFreeString(topicStr);0 d7 l/ P2 {6 U( l1 p1 _2 H
        SysFreeString(itemStr);2 q9 ?; d- m3 p: W* n& b
        SysFreeString(valueStr);! S# Z7 v( A; A0 t$ y
2 M. W$ H+ J  n" }
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
" P5 H( O; g. E: T9 S' Q此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????" x, x; k: _- {9 r: |& l
5 ~: Z  H8 o6 X/ s
6 |' g! w1 w+ S/ z: N
2.这是request的程序
4 v) L; C* L$ L) P1 p  ]0 s  H0 U//  Request a value from Extend
9 k: }5 s* v+ @$ U* T) \! d//
5 U+ z4 q0 H9 n- [//        Initialize the variant that will hold the BSTR.  Set the variant's
, I$ k' \/ v' H6 L$ f* u//        type flag to indicate the fact that this variant holds a BSTR. Place the
: Q7 v+ M1 t8 k1 o9 {//        BSTR into the variant structure.. v, H; V) X9 l/ n: |

" w+ G* C& A) Z, S) k4 I( @* m        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
7 z% P3 J+ o1 E8 d       
8 ]' |7 R$ Z' [7 ~5 {5 Q1 o! G         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
4 @( M0 ^1 f2 O. w        VariantInit(&requestVariant[0]); . h* ?6 S7 ]% c) S' g# D
        requestVariant[0].vt                 = VT_BSTR;; j+ Y' h9 B% K' O; ~- N
        requestVariant[0].bstrVal         = itemStr;9 R! r* s0 X* ?

  V+ O: x, b( Y, B/ G8 u  `: L          topicStr                                         = SysAllocString((WCHAR *) L"system");8 }! z2 W- b, }% ~7 g2 y/ e
        VariantInit(&requestVariant[1]); + }, r7 J: W4 I
        requestVariant[1].vt                 = VT_BSTR;
. W4 m. x% u9 m6 p& q! m0 w        requestVariant[1].bstrVal         = topicStr;' b- Z; {$ Y5 k. }3 j

  G3 j( G- {  a' h//        Set the DISPPARAMS structure that holds the variant.4 N8 R1 v8 p5 p: v
: Z5 O" m- E/ ]' N: s/ c3 c
        dp2.rgvarg                                         = requestVariant;
' v7 S) i3 ]5 B; I1 @; P2 U  K" H        dp2.cArgs                                         = 2;
* x( q5 F0 A0 E! m2 f, O        dp2.rgdispidNamedArgs                 = NULL;
/ K& {7 Y# E7 t        dp2.cNamedArgs                                 = 0;% e9 L( b0 g  T0 c; C% N+ S" ?
" g; f# k( L6 q9 q( M: c* H. C3 @
        var.vt = VT_EMPTY;
2 {  s3 G. R* n! q  g- b. ]. m' o- |2 U5 T2 ~  Z
//        Call IDispatch::Invoke()
$ \, ~# r0 R% {+ j+ A# Z; `# u6 @$ I  i2 u4 a
        hr = m_pDisp->Invoke(8 ~: a+ l& c( g
                requestID,
& x6 ]  r7 h- Z, K- ]' w1 @: ]                IID_NULL,/ N! E6 z( O  j6 W! L2 \1 ^
                LOCALE_SYSTEM_DEFAULT,
4 A7 J$ g$ B# M: Y1 O9 \                DISPATCH_METHOD,% h4 z' Q. j, R* F4 f' c9 T
                &dp2,
) Z4 E& ]9 _$ ^9 W- S' i) r$ l! K                &var,
* p; J: X+ n+ D' D; H                &ei,
% b2 C0 {% i) d0 M$ r                &uiErr);
- N, i: M0 f1 V" }" u" Y) X* K, q6 z
        SysFreeString(topicStr);
5 {# @6 u' @  c2 }        SysFreeString(itemStr);7 P" n; Z0 O* K: G4 U
请问该程序是获得extend里面的哪个值?; R+ O( e- U7 Y; t' l; E
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-4-10 03:48 , Processed in 0.014870 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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