设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9638|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
6 A" X$ f* K! q. F- OName = (WCHAR *) L"Poke";; e5 V$ Z5 p$ W+ k5 ]+ ~
                
% ?& d# M! U3 a: H        hr = m_pDisp->GetIDsOfNames (4 o$ H) L: m! l; [6 X
                IID_NULL,                                // reserved
4 b% }/ ^0 i* h) M& A                &Name,                                        // Array of names to get IDs for
% v8 H4 w# _1 [: \; a* a                1,                                        // # of names in the array
5 d) x" Z$ M4 ^9 C1 [/ q. i8 L1 Q                LOCALE_SYSTEM_DEFAULT,        // System locale4 C. E8 A  T- y2 F% V
                &pokeID);                                // Array of IDs to fill on output
' s$ ~6 [. }4 ?- M5 [( u                       
; \+ }& ^3 [! t. p: }' v; j        if (hr)
. }5 r, k4 S9 K                {
" L4 J3 U& L+ l+ {3 M                MessageBox ("Get Poke Unsuccessful");4 R: K9 J" a8 Z# [; ?9 T- N
                return;
+ x  S$ F9 B. s( x9 v2 }                }
+ K& X. Z$ p6 e* f; X
+ Z% p) Z, ?( Y2 W9 ~/**************************传递数据给extend**************************************// s& [+ \( t; ]" @
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
+ B6 M& q: V- `        - H" n4 m  _+ P: v6 Y7 T  y% v
        valueStr                                 = SysAllocString((WCHAR *) L"1232");* e0 z! d. R6 q, X: n/ C
        VariantInit(&pokeVariant[0]);
/ Z0 J! K9 M& C5 z4 N6 T) z2 N        pokeVariant[0].vt                 = VT_BSTR;
; n4 c. E0 C5 Q) q        pokeVariant[0].bstrVal         = valueStr;
; I) u3 j) |! o9 Q* a  ]$ V( |0 `+ t, {
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");: {) q# S/ A$ _  l
        VariantInit(&pokeVariant[1]); ' G* h  K1 y& {0 j  J
        pokeVariant[1].vt                 = VT_BSTR;! U. U0 s7 J& v% d6 f% ^& Z
        pokeVariant[1].bstrVal         = itemStr;& h7 {* P6 r% B  g/ X0 p
) b5 p& [9 r/ `# B  m
          topicStr                                 = SysAllocString((WCHAR *) L"system");5 Q! F9 i9 P$ g% N% d/ x
        VariantInit(&pokeVariant[2]);
+ Y1 S. |+ i: r/ l* f        pokeVariant[2].vt                 = VT_BSTR;
  ^2 j( y' d4 @$ s9 Z; Z        pokeVariant[2].bstrVal         = topicStr;4 h7 A7 x7 L9 S% {/ t+ y

% T. A! z$ P! s' X! |//        Set the DISPPARAMS structure that holds the variant.$ D" C3 ?8 [. D% `; W. h

5 C& U5 n9 f% d$ x        dp.rgvarg                                         = pokeVariant;2 H& m  P- e' S% K2 F
        dp.cArgs                                         = 3;
) V0 ?) K( G6 {2 j1 T$ ]        dp.rgdispidNamedArgs                 = NULL;
! R2 I7 Q6 F7 g/ `# G2 U        dp.cNamedArgs                                 = 0;
5 V9 a2 V5 W9 I
0 v  \% {  i+ T4 v; l//        Call IDispatch::Invoke()% y1 u6 K4 F( e; I. [: S( t( H

5 Z5 [8 \- g" \7 |        hr = m_pDisp->Invoke(
% _) Y. t/ c% u4 J, F7 G4 l                pokeID,
. @: g" U  e& L; A: n) v                IID_NULL,
( h+ Z! ~4 V$ g8 |                LOCALE_SYSTEM_DEFAULT,
. H; m. d; C. w0 `# X% m                DISPATCH_METHOD,
  M3 ?# ]. O: n, X9 p+ R- s                &dp,. Z9 B/ f3 b4 o1 D; S
                NULL,
0 O) k9 x5 k) P7 v/ J) D                &ei,
/ e" A) }6 X7 t6 z$ x                &uiErr);
" e9 p4 O' M9 I% `) T
3 P) J$ a  @6 W' D        SysFreeString(topicStr);
) ?, ?' ?: B7 N        SysFreeString(itemStr);
$ ?0 ~- }* h. t' p4 G        SysFreeString(valueStr);8 u' {' G$ K3 Y
9 R! b7 \) c+ ^+ O) t0 {
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
/ T2 C( I4 A6 H7 o8 T此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
! l9 t+ x: p/ w7 L1 P6 N
4 ?. m, L( Q, X" L7 q! H3 T( O5 v% w
2.这是request的程序
: v. |! A$ j! q: `/ T//  Request a value from Extend
; p# T3 b) Z# H//3 J' Z! J) v6 ]# Q5 D  l4 t
//        Initialize the variant that will hold the BSTR.  Set the variant's$ f6 K" r2 G" p" E: D1 Q7 O+ F0 Q/ e
//        type flag to indicate the fact that this variant holds a BSTR. Place the' V! s$ b7 G7 q
//        BSTR into the variant structure.0 D7 [- \! L! \! Y; N! R5 C
4 h3 q0 I) V  ]
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);- U0 p( T# |5 d/ v: U9 ~" L1 h
        , K( X& P, W; n. r: T4 }9 v1 K
        itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");6 F4 `% A5 U' \7 a) Y4 g1 B
        VariantInit(&requestVariant[0]);
2 e) c& ]( i( ]1 }2 ]* S/ f6 S        requestVariant[0].vt                 = VT_BSTR;
& x' T$ g/ n7 J& J        requestVariant[0].bstrVal         = itemStr;2 z+ q" C4 V2 N" }/ g" U7 W

% K+ ~" i1 A4 M  i+ ~/ ?          topicStr                                         = SysAllocString((WCHAR *) L"system");/ t7 i4 X# d- O4 K1 D1 ~) p
        VariantInit(&requestVariant[1]);
9 s7 _+ p6 {2 H        requestVariant[1].vt                 = VT_BSTR;
- ]8 }, U% P+ A1 b& O7 V/ n        requestVariant[1].bstrVal         = topicStr;
/ U4 _/ \5 l+ L- m9 ]& F
! S  W9 R2 D2 q/ `. e//        Set the DISPPARAMS structure that holds the variant.
* u- V' F. G" r0 c& Q) B( ?* @6 U  b- U/ v& z
        dp2.rgvarg                                         = requestVariant;' g  P2 ]1 L7 \" z; b
        dp2.cArgs                                         = 2;- i7 X9 A6 `' j! d! f
        dp2.rgdispidNamedArgs                 = NULL;
4 y$ q& |2 f. M/ d9 N0 Z: b8 y        dp2.cNamedArgs                                 = 0;
1 s; F" a0 X3 R% ]* a8 \7 i6 P0 z" b8 s; o
        var.vt = VT_EMPTY;9 R& Q% i0 N3 X& ~( [' P
8 w) o0 Q1 l" r: g
//        Call IDispatch::Invoke()
( ]( d/ N8 N4 q! I- I1 F0 R/ k- S. |3 x" y5 |3 O
        hr = m_pDisp->Invoke(
6 Z8 h, O$ \6 j0 o" }) j/ v                requestID,
, }# I2 \: H! v, G& H: I3 {: {: Q                IID_NULL,
2 \: G4 ]0 z. C/ H  }+ f/ |                LOCALE_SYSTEM_DEFAULT,& u6 c+ N) @. d0 m6 {! @
                DISPATCH_METHOD,
. r2 L( C0 z. l* E$ K4 w" G                &dp2,; P$ U0 e+ j# B6 B5 }1 A
                &var,# ^7 M( f) d6 [7 M; w2 ]- v  u
                &ei,7 b( h3 V  D2 x' q; C8 W
                &uiErr);' g% u* E5 g1 O3 k

5 @2 l) E( ?8 @2 P% _        SysFreeString(topicStr);
5 a' |  J( }% G( e  {        SysFreeString(itemStr);0 d. K1 r" t% Q0 w: Z& Z: e
请问该程序是获得extend里面的哪个值?$ i. h, r- W% u6 k
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-4-24 17:27 , Processed in 0.012964 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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