设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11598|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:8 Y9 y- I8 K) {: f' o0 N" ~2 a
Name = (WCHAR *) L"Poke";# E! ]$ S0 C) F
                 ! ~$ p3 p: P0 `! Z) i
        hr = m_pDisp->GetIDsOfNames (. k2 p. b1 {( P
                IID_NULL,                                // reserved
- W0 ~9 C9 p! G7 s                &Name,                                        // Array of names to get IDs for- D& q/ V* n) _8 L
                1,                                        // # of names in the array
* t8 W2 G' t0 \8 `/ B. ?                LOCALE_SYSTEM_DEFAULT,        // System locale* W# d) @# s# x7 L- s' ]
                &pokeID);                                // Array of IDs to fill on output
' `- W. D, H! A. S9 k                       
9 T4 j9 B1 ~9 e1 J  U* F) @8 Q" A        if (hr)" X7 o0 O3 I. A" k
                {
& ?/ `2 n$ V. g+ N/ O( g                MessageBox ("Get Poke Unsuccessful");
4 N, k: Q% b1 B- e0 U- Z, C                return;/ b) H- @: T+ C6 q8 k
                }3 u  Q/ ?% o7 o2 a; M. \) q. j

8 t. H' o. y9 _% m/**************************传递数据给extend**************************************/6 S& ^5 i* v$ k: r/ d) `7 o
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
6 l9 O# [  W# e# Z% G8 Q        & E; h' [! K+ Q( j3 T, A6 b
        valueStr                                 = SysAllocString((WCHAR *) L"1232");0 p" |& ^. k( V
        VariantInit(&pokeVariant[0]); : m2 d5 V0 O$ u) ^0 R6 q1 C9 F8 ~
        pokeVariant[0].vt                 = VT_BSTR;
" ?5 D& X8 \0 X9 p: H, J        pokeVariant[0].bstrVal         = valueStr;& j  d' K7 K% i# Y
2 }! b0 X6 t5 B) e
        itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
; D6 q4 S5 ^9 s' ]5 J- ~1 T: V$ i        VariantInit(&pokeVariant[1]); % O5 E9 {' a5 ^+ V$ j* C
        pokeVariant[1].vt                 = VT_BSTR;9 ?' @! H$ j1 D7 o
        pokeVariant[1].bstrVal         = itemStr;7 U# {  ?+ O2 C6 ^3 f
& K( c7 y# {/ O2 W  O& C+ V1 ^
          topicStr                                 = SysAllocString((WCHAR *) L"system");1 [. f3 |% |! {/ a
        VariantInit(&pokeVariant[2]);
; T: w- O" K4 P* j        pokeVariant[2].vt                 = VT_BSTR;
3 e6 f) \+ {$ m9 _        pokeVariant[2].bstrVal         = topicStr;; G, T' I" S# M" Q; n
/ F2 x  t+ J  a& j: u5 H6 V
//        Set the DISPPARAMS structure that holds the variant., \( M" k1 [% A

1 H. O; X; `- Q& Y        dp.rgvarg                                         = pokeVariant;
* I% U; }7 m4 }# H        dp.cArgs                                         = 3;+ ]! T% |5 |) V: g: B. v9 @
        dp.rgdispidNamedArgs                 = NULL;9 u+ r) o, L4 r: z2 T' u* U8 P
        dp.cNamedArgs                                 = 0;3 n9 d1 \4 t& {3 c- F+ ]
- f& D- P/ x& @$ Q% i0 \$ @
//        Call IDispatch::Invoke()
1 z' E4 t' }2 i7 x0 g! [* R/ e
4 v6 i( Z$ p5 q# G/ o7 J        hr = m_pDisp->Invoke(
5 w; R4 b: Q  i) |5 `                pokeID,
9 e6 o* _! w7 D9 V! v                IID_NULL,- r. x, X/ q8 }, |% M$ Z" d* `
                LOCALE_SYSTEM_DEFAULT,
7 Y7 r) s3 J  H8 f* e; H                DISPATCH_METHOD,
3 X- E9 K2 A( R4 r7 R; o# D                &dp,
. b  j/ m& q5 l5 h                NULL,  O3 z9 z! L  E( [" m) S
                &ei,
( c# |9 B9 m5 C; p  g                &uiErr);+ H( W: C. }7 m* `0 i
9 g4 B1 `% C2 S7 R
        SysFreeString(topicStr);- V4 A* H: D  y- d% d
        SysFreeString(itemStr);
9 k. N6 e9 O4 X3 x  p. d3 ]( [        SysFreeString(valueStr);
" y, O% v7 ]/ c
2 }; j; v% W, F: B现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???6 ~# L$ V* H0 ~, P- h, y
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
4 G* s8 J; f! d% s
# {& x1 }  s5 S9 E/ S& u
. |3 ], e3 P  i+ t* {% S4 w7 \2.这是request的程序
! D4 ?6 T' \7 D% r" \1 j  F# S//  Request a value from Extend
' W/ d9 ~: u. B. u) e5 T//+ m; [4 P9 j! J; o
//        Initialize the variant that will hold the BSTR.  Set the variant's
" c7 j+ c/ M. H* L* S+ A//        type flag to indicate the fact that this variant holds a BSTR. Place the5 K; U- ?; n6 l# o# x3 f
//        BSTR into the variant structure.
# J. Z- T  @! Y6 }6 D3 I# [& b4 ^/ V2 e" g) O
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
/ m/ D% o" R8 r1 r/ N# f2 H+ h       
! T1 z7 X9 X& p# I8 j" j/ @  L         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
8 X# P6 g* V  ?: h# N/ a        VariantInit(&requestVariant[0]); 4 d5 v" T7 X, O" R3 b0 T% V. R
        requestVariant[0].vt                 = VT_BSTR;8 Q. c  [0 Q8 J1 g. s& c2 C5 g: _- W
        requestVariant[0].bstrVal         = itemStr;
4 Z$ J* k" o& n; d7 a7 i$ K0 x) ~* n" e# _' Y. s
          topicStr                                         = SysAllocString((WCHAR *) L"system");3 {6 F* G' S5 w4 o7 A( r8 y; r
        VariantInit(&requestVariant[1]);   u- H# U5 ?4 _
        requestVariant[1].vt                 = VT_BSTR;' v+ n0 s, }6 q. }
        requestVariant[1].bstrVal         = topicStr;
1 A4 {/ Z' z6 z- B! Z6 a
+ H* e6 r' s" i: ?5 R% P6 C6 \3 @//        Set the DISPPARAMS structure that holds the variant.. b  V9 e5 N- Z4 `( z  R, O
! V$ w6 _$ N. d$ _7 i  u
        dp2.rgvarg                                         = requestVariant;+ P: `9 Y" W. n, f, o
        dp2.cArgs                                         = 2;
3 G9 x/ Z3 E; ?# Q        dp2.rgdispidNamedArgs                 = NULL;- ]3 Y& j9 u6 M4 {: _
        dp2.cNamedArgs                                 = 0;
* n0 Q: I) _2 U' w, ~/ z# z* s  K, B# \* z7 [# u
        var.vt = VT_EMPTY;
1 r6 a) A1 |0 O) J' A+ D
3 \2 K% Y9 f% `9 a, {//        Call IDispatch::Invoke()0 K" t: l8 S' e1 u- h, f) C+ U7 y$ T' ?
- k: ~, f% e' O; A4 o- E) c' {
        hr = m_pDisp->Invoke(- _) F& z" b0 r* R+ U2 D
                requestID,
8 R( Z8 ^+ S/ Z# [3 y1 o) X/ [                IID_NULL,
: e/ s+ g' z1 J- t3 S3 L                LOCALE_SYSTEM_DEFAULT,% S! L) Z4 {, b* {
                DISPATCH_METHOD,
6 R+ Y. P9 W6 ?( H6 N" N                &dp2,7 A6 X. G# ~( j/ i
                &var,: I& M* K; g2 ?/ u6 a
                &ei,
, G- y! ?3 @8 [' b1 T& l                &uiErr);; Z( k  n: S3 q' U
) {, C3 D& u  x& c( y
        SysFreeString(topicStr);: D2 D  B- A8 E
        SysFreeString(itemStr);' J0 e3 ]* u' V8 \7 u8 m
请问该程序是获得extend里面的哪个值?( m* o! J: `5 w4 H. z  I* P
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-7-14 21:53 , Processed in 0.011919 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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