设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7387|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
3 D% r) O5 |' W$ |+ q. V# M3 zName = (WCHAR *) L"Poke";% j4 h; S  l. ^. O9 g6 m3 O
                
/ z! d4 p0 @* I( i4 h$ a$ P, A3 a        hr = m_pDisp->GetIDsOfNames (
$ Q. ^- F& c4 G, h                IID_NULL,                                // reserved/ R4 K# P$ j+ [+ x) ?
                &Name,                                        // Array of names to get IDs for# ~: b0 \7 ~: [' O) h( w
                1,                                        // # of names in the array
( T  ?1 h6 Z9 W( Z3 t1 G                LOCALE_SYSTEM_DEFAULT,        // System locale) |4 S2 R4 w+ {* q
                &pokeID);                                // Array of IDs to fill on output; I$ o: S( k# h1 W
                       
5 G. c0 D- E: o4 X8 r: Q+ z. O        if (hr)* \- ?* S# m  q6 @3 V
                {
; d" i( a# B' V  f  h* p+ l                MessageBox ("Get Poke Unsuccessful");
$ ~& g2 W# c/ q                return;
2 `4 p0 A; J/ C* R+ w4 ?% g                }% A3 n" J1 M2 @  V

5 I# E# n: }" R5 B/**************************传递数据给extend**************************************/5 e3 x5 f% Z( o" j# f3 t; D
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);! q6 o3 ?$ |! n* |& p; `% T# y8 y/ B
        7 v& `! T* c" l9 S8 f4 C
        valueStr                                 = SysAllocString((WCHAR *) L"1232");, V$ ^3 P8 |, U5 x8 L* z9 A7 T
        VariantInit(&pokeVariant[0]);
. k' @3 y. \/ P2 q  d        pokeVariant[0].vt                 = VT_BSTR;9 R+ ~" ^& x+ W& _3 R
        pokeVariant[0].bstrVal         = valueStr;
( y! R% \7 A* e- j. {: S2 Z
! @* a$ B/ ]6 d: r. P4 S: y+ @$ y         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");
: e' I9 o: x! ]! A  @6 T$ P* ]        VariantInit(&pokeVariant[1]);
( B+ D& Q2 e4 @. M        pokeVariant[1].vt                 = VT_BSTR;; u: u. b- ]& x; C
        pokeVariant[1].bstrVal         = itemStr;, ~" u9 c6 w4 e% N5 H
) A$ D3 I( i! {# B, A4 S
          topicStr                                 = SysAllocString((WCHAR *) L"system");
  u, |- R6 Q! n9 X$ V; X        VariantInit(&pokeVariant[2]);
/ A/ l$ G' v6 L        pokeVariant[2].vt                 = VT_BSTR;4 S, G( D/ {4 a' J0 ?
        pokeVariant[2].bstrVal         = topicStr;* x5 L! \3 S. S! U3 \9 `+ ^
* n. C$ k9 {6 n+ A: B7 b
//        Set the DISPPARAMS structure that holds the variant.( P. t( w! _* h2 o
2 E1 K5 h; o; ~" E) p1 y
        dp.rgvarg                                         = pokeVariant;. }) S( s1 w3 C0 R  ?* i) v
        dp.cArgs                                         = 3;
" i5 d/ {) y, H        dp.rgdispidNamedArgs                 = NULL;5 r0 M0 E7 H* v$ v9 [9 ^- g' Y8 M) E
        dp.cNamedArgs                                 = 0;" f& z9 s$ x: w" @! |& [) o  u

  U/ ]* U3 M$ X: O0 e//        Call IDispatch::Invoke()
6 b8 c2 q1 X$ P( n9 X$ R# h2 _8 G9 ]- q7 I
        hr = m_pDisp->Invoke(: X( I( A0 Z4 l! n! o& R  w
                pokeID,- V, `) M+ _3 j2 U. s+ B
                IID_NULL,5 M: @7 ?  w1 R+ j  ?2 f
                LOCALE_SYSTEM_DEFAULT,, V! x8 ^7 v" @( C- ?
                DISPATCH_METHOD,% X" u% }4 R! l, J, e3 H/ C
                &dp,
8 ?" u% S. v: x7 K% z8 w& E                NULL,2 j4 E' S# R% l7 r0 i4 D
                &ei,% S+ Y- V8 y7 b) ^( ^
                &uiErr);
" c$ G% s! Q! |$ C( O$ H1 n& y3 ]; W$ W; h+ S6 N8 b
        SysFreeString(topicStr);% ?  h  m2 U" l+ ?" L) [
        SysFreeString(itemStr);
) m/ v( h2 r9 I        SysFreeString(valueStr);6 f8 W( ]- l% o  h$ d  l6 g
% P; ~" V6 S8 P4 Y! k
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???
" }+ K1 Q" I8 H* L此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????! S  u# ^5 ^$ s4 T

  b" Z+ r9 B. p: N6 h3 C4 R+ x5 r8 m( {/ B
2.这是request的程序  s, K; _* C7 d1 B  {0 k! K% p  `
//  Request a value from Extend# j! {. g, L2 d
//
3 L+ |+ g3 T" h. ~# y/ h% D//        Initialize the variant that will hold the BSTR.  Set the variant's
! X) M3 [" a7 \# n6 N//        type flag to indicate the fact that this variant holds a BSTR. Place the
2 n$ y( a& q4 f( d! D6 W& Y//        BSTR into the variant structure.' f5 n2 M$ Y& r
( N! p0 e2 v5 x- Q  d' t. ^5 A( O
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
( j3 f5 @5 ]: C; c1 f2 n       
- p0 |! ^* a% q) N2 G/ d  ]- Z- `& B; D         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");7 G; w# C8 N# S( @7 i% p5 b) m( i. V5 J
        VariantInit(&requestVariant[0]);
' l8 q' W& O. f- F3 J- o        requestVariant[0].vt                 = VT_BSTR;
( O& p( q6 ~& n1 x, x% H" H        requestVariant[0].bstrVal         = itemStr;" C5 b1 M. @0 F+ |( b# T. U. @; }1 \: [
% J" p7 {0 `( ~% m  [% [
          topicStr                                         = SysAllocString((WCHAR *) L"system");3 a' h6 d$ O+ Y, t# u1 T! ]
        VariantInit(&requestVariant[1]);
4 W% V, F8 f7 f* w" {        requestVariant[1].vt                 = VT_BSTR;
1 _9 n% @8 l, a  u3 K* E% q' k        requestVariant[1].bstrVal         = topicStr;
8 V) R& z) P4 N8 T) t+ U! S
! `; n+ o3 L" i+ j0 t9 p//        Set the DISPPARAMS structure that holds the variant.
, O# K' g- }5 M
6 t- G8 L2 I; {. D! {" ^1 d. c" n        dp2.rgvarg                                         = requestVariant;3 O: E( n* V* ~% f1 ?& b
        dp2.cArgs                                         = 2;3 l" x) J# g1 Q& S6 m9 J
        dp2.rgdispidNamedArgs                 = NULL;
7 R) l+ f$ c+ Q& S' Z        dp2.cNamedArgs                                 = 0;/ \- m0 U' q5 T2 ?3 G' _
. h! d" d% i. c9 b/ Z) X: Z
        var.vt = VT_EMPTY;3 R7 ~0 u* @; s1 V6 t

  }. L+ E* j' `$ T//        Call IDispatch::Invoke()
) s) s6 O- n% m$ W
" L7 m% r. b# \        hr = m_pDisp->Invoke(+ l, Q1 X. i! V3 [* c* O
                requestID,
. E, Y9 D$ w' @( x) d6 g- u$ O$ Q                IID_NULL,+ e! _' |, s  o2 Q' r% f
                LOCALE_SYSTEM_DEFAULT,
# a1 V% }5 i. H! c0 G                DISPATCH_METHOD,8 {/ {. \/ z" t; A) c' e
                &dp2,$ z. ]8 f- l9 C3 d+ h7 `
                &var,9 _1 j/ h( x+ c% w* p
                &ei,
: z8 c8 _$ ~$ l0 V6 e                &uiErr);
2 l) R8 R' y3 E) U- E9 I9 y& n5 t; j* a- `) p8 u9 C! P
        SysFreeString(topicStr);
* e# z+ z9 T0 i9 u; c        SysFreeString(itemStr);
! g( h3 S" s" ^0 \7 z7 ~请问该程序是获得extend里面的哪个值?
  v: g) }8 b  B- g6 g/ D8 ?: d如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-1-18 02:40 , Processed in 0.018354 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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