设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10714|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:2 D/ |* ^0 l+ J0 U; W
Name = (WCHAR *) L"Poke";
6 c. d3 n2 F  m                 1 t6 j# X6 G9 h" f& g8 {
        hr = m_pDisp->GetIDsOfNames (4 ]$ ~% U1 B+ W5 a( ^9 R; q% k
                IID_NULL,                                // reserved! Z" v# |; s' U! @2 n1 J, E/ u
                &Name,                                        // Array of names to get IDs for
9 X$ U! k% u/ y' R9 n                1,                                        // # of names in the array6 i* a3 J! a7 b% v% g5 f/ R
                LOCALE_SYSTEM_DEFAULT,        // System locale
! `: H0 B) y, I# N2 G1 m                &pokeID);                                // Array of IDs to fill on output( Q. d6 a& A1 [9 c: s
                        7 U4 r& `0 D* t- G5 |# a. V1 [
        if (hr)
6 R! N1 o- x* [4 I                {; B, s+ f" j0 B& C" d, R& Y
                MessageBox ("Get Poke Unsuccessful");
7 N3 D( `: u6 {9 c                return;* e) m! T+ K" X3 \) |
                }9 ^: d4 k9 p  X) q
; J) x* }8 I+ S4 i3 O' k2 w) M
/**************************传递数据给extend**************************************/% w1 a' A1 w4 `1 f7 D
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);
. X* j! E" W: m) @7 [, A. g; g       
! S1 W& g% \9 b( ]- a) y( ^         valueStr                                 = SysAllocString((WCHAR *) L"1232");
  N% v, P% \# E3 q        VariantInit(&pokeVariant[0]);
3 Q  R" v/ G8 t& T8 F) c, H/ U        pokeVariant[0].vt                 = VT_BSTR;
5 z" g7 f$ @+ y% L  K' N/ X- T        pokeVariant[0].bstrVal         = valueStr;
6 j3 O# G, |/ Q9 w
2 V/ Y; [/ O2 c: d         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
. W, u8 n2 q$ A% j7 [/ y  ?        VariantInit(&pokeVariant[1]); & L1 Z2 @9 F4 W
        pokeVariant[1].vt                 = VT_BSTR;
0 D, X; u0 U  Q: q        pokeVariant[1].bstrVal         = itemStr;
$ W3 }3 b9 d- X. t, M
6 K4 @, w* z3 w7 P& a          topicStr                                 = SysAllocString((WCHAR *) L"system");! w0 M2 i+ V# u) V/ g9 U8 a
        VariantInit(&pokeVariant[2]); , K' @. M% {+ G- j6 D  B
        pokeVariant[2].vt                 = VT_BSTR;
3 \8 E- }8 B: J" h& ^5 t; Q& I  C6 O        pokeVariant[2].bstrVal         = topicStr;/ [5 [# n" j" @9 S8 i2 O* }' H

, K# w$ _9 H5 n0 g1 c- ?//        Set the DISPPARAMS structure that holds the variant.
/ G4 D; F3 T8 S9 ]8 `
3 }0 W) V  {! Z, t  h/ f& q6 C0 ?, z        dp.rgvarg                                         = pokeVariant;
. a( E$ K: O7 F; Y, [        dp.cArgs                                         = 3;, C$ Q8 w  l2 y  C: {
        dp.rgdispidNamedArgs                 = NULL;
7 i1 L4 s6 }" e        dp.cNamedArgs                                 = 0;( K6 x& |; }8 A0 j0 C( H

/ j9 O; g; K, t//        Call IDispatch::Invoke()
& \2 M) A3 _' l4 O1 k( j7 w! Q& d
- j2 ]) q! Y. i) v* Y        hr = m_pDisp->Invoke(+ ]/ G+ R/ B) v- U- N
                pokeID,) M( F" e+ [$ ]* P
                IID_NULL,
" N5 M5 W6 b! }3 N4 ^( z1 U                LOCALE_SYSTEM_DEFAULT,
/ d$ r+ l& N/ J5 `: h+ G                DISPATCH_METHOD,! j/ o: M8 c2 X) a7 e" F( g# \6 p  z
                &dp,+ L4 W9 }: j- v
                NULL,
6 g+ F) s1 R* ^' y- c# X$ v                &ei,7 P. Y- m4 ^5 z1 T& \! n7 H
                &uiErr);/ c) P. g/ C2 a7 T/ R6 U
- V- {/ T3 c/ z! u, _& F
        SysFreeString(topicStr);
8 X# q) D% J; H& F/ [; D        SysFreeString(itemStr);
% R% c' {5 x' D5 `        SysFreeString(valueStr);
5 }+ Z5 d- z- M5 x& c1 F. ?9 S4 Y5 s" ?1 w! X3 r8 N
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
6 `- I- G, j# Z& u: H此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????
( f& e# E- C2 \, d5 r# r& Z1 \3 f2 r' f2 m
# E) T9 d* k1 g: b
2.这是request的程序) H: U, S5 f2 t3 ~) ?# F
//  Request a value from Extend: |2 x1 h  T$ ?2 ]; T! z- ?! N
//9 \' ~9 a/ g, b+ f% C
//        Initialize the variant that will hold the BSTR.  Set the variant's
3 C& `( s7 W2 z5 _3 o3 [) Q+ g//        type flag to indicate the fact that this variant holds a BSTR. Place the
  s# _1 c, a7 q, c, f8 N) r//        BSTR into the variant structure.% W# {* M) ~4 @. N: b- R
  \+ Z6 ~. ]3 E% r# w- V
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
' m* m8 U4 l8 i' b; H  y       
) a% \1 ]- N) m; I7 B3 C         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
" H7 Q. D& ~, s+ _( |+ R; `1 q        VariantInit(&requestVariant[0]);
  h9 x$ S0 f) W        requestVariant[0].vt                 = VT_BSTR;; Z: i) l1 e8 H
        requestVariant[0].bstrVal         = itemStr;3 C7 Z1 `3 I  r& w
* i+ Q6 K1 E( d) N
          topicStr                                         = SysAllocString((WCHAR *) L"system");3 }% A! f$ U7 x5 F" {, Y
        VariantInit(&requestVariant[1]);
( x2 u& w8 @% X# D4 a+ P        requestVariant[1].vt                 = VT_BSTR;1 ^; W/ S8 z$ g( P0 f5 U8 N3 b% K4 t
        requestVariant[1].bstrVal         = topicStr;
* A& n8 ]! ~! W  o7 l# L, F% q& `: o) W6 H6 f
//        Set the DISPPARAMS structure that holds the variant.
9 Y! q; [* c5 O6 k( R
1 I6 Y# j# X; i. t        dp2.rgvarg                                         = requestVariant;
. S3 y6 F1 P. ~' _        dp2.cArgs                                         = 2;
* B4 D* ]' X# n7 z1 O+ F' d7 k        dp2.rgdispidNamedArgs                 = NULL;& B9 Q9 @7 B# d; h
        dp2.cNamedArgs                                 = 0;
' ~4 T* r5 U  S1 ?! p* V
8 Q2 t9 `  l7 v8 |( ]         var.vt = VT_EMPTY;
# [1 a! p6 y3 B2 ^( h
* `2 N  G& R, n1 W% I4 \$ o$ r//        Call IDispatch::Invoke()
0 H) t$ X  L. J0 O' _
  F' t* {- l2 l5 p        hr = m_pDisp->Invoke(7 o- w8 E; g: `5 `6 i
                requestID,  j  R( ^# q$ a0 a
                IID_NULL,$ g! s. T8 ?  M* r- a
                LOCALE_SYSTEM_DEFAULT,; I/ Q9 p- b$ J) G- I
                DISPATCH_METHOD,! Q; ]* `' N/ ]" ?" e) m0 w
                &dp2,+ [0 f' n9 |( q* Z' h8 ]- w
                &var,* b- m9 Y& _' W+ ]
                &ei,3 [* e' j" z9 F; D0 e' c
                &uiErr);
3 o7 V2 E3 k/ i) X# {& \* Q9 U, Y
& B& ]% i8 l+ F( @! j: k0 E        SysFreeString(topicStr);! t; P) _7 _! @2 [5 ?" [
        SysFreeString(itemStr);
, S0 v7 I! b* Y( ]+ W请问该程序是获得extend里面的哪个值?
( \- w8 P3 p& d' M9 {如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-6-9 00:34 , Processed in 0.011754 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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