设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12340|回复: 0

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

[复制链接]
发表于 2008-11-25 19:37:03 | 显示全部楼层 |阅读模式
5仿真币
我现在用c++编写了一个程序,希望能够和extend交换数据,以及自动对extend进行一些操作。我参阅了例子里的关于OLE AUTOMATION方面的c++程序,但搞得不是很懂。比如说,c++程序向extend发送一个数据:
6 J6 w, Y9 v# F1 g0 g6 }Name = (WCHAR *) L"Poke";
! W* x* }  V5 B. ?, N& C                 ! K& J  ~6 e- |6 U: c! u
        hr = m_pDisp->GetIDsOfNames (
$ b) T- `3 A* T, L; ^1 b% {1 \' ]$ |                IID_NULL,                                // reserved
" g! y& ^5 @/ `1 S) S                &Name,                                        // Array of names to get IDs for
' _/ B9 ^0 Q% |/ E/ Z# s                1,                                        // # of names in the array
8 |; T) I" A2 d6 x$ V                LOCALE_SYSTEM_DEFAULT,        // System locale
7 R9 N- u; Q% ^! R                &pokeID);                                // Array of IDs to fill on output
( X/ E: U: ~  c8 x  P1 r) ]                        7 E" R* B- ~  t& }( m5 a
        if (hr)
4 W1 t" ^5 x. W& K9 U5 n1 S                {
4 I2 i; x8 k$ N0 {                MessageBox ("Get Poke Unsuccessful");  O& f( o; e+ t  X. g
                return;( Y5 {/ D. M5 S+ C& O1 A5 T
                }. q, h6 l# j' R* n( U7 c

; C& w+ [% X7 V. C7 ^, q/**************************传递数据给extend**************************************/7 Y2 ]+ U5 }, _. ~! x8 [
        pokeVariant                         = (VARIANTARG *)malloc(sizeof(VARIANTARG) *3);+ B. E0 V6 l5 X" I
        - l* u6 Z- }& j+ T! m
        valueStr                                 = SysAllocString((WCHAR *) L"1232");
9 }1 |! n8 k9 L8 U. |' U        VariantInit(&pokeVariant[0]);
( P7 r% H3 v9 f+ h# _9 u3 {6 ^        pokeVariant[0].vt                 = VT_BSTR;3 [2 ^: y, h, D& X. s
        pokeVariant[0].bstrVal         = valueStr;
; b- e1 H( i2 R! |6 `9 M
- ?/ J5 d" f7 @$ o4 ]4 k# T$ h         itemStr                                 = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");2 x4 \' O# e4 q. v+ Z2 j
        VariantInit(&pokeVariant[1]);
/ l$ s6 f1 A( W( s        pokeVariant[1].vt                 = VT_BSTR;1 r% W! S* M5 ~/ p! J6 S7 R
        pokeVariant[1].bstrVal         = itemStr;- \; [! }2 `* b! g$ n, I+ D) h+ L

7 }- w& _; c: t6 G  B  Z8 E1 R8 e! O          topicStr                                 = SysAllocString((WCHAR *) L"system");/ W0 v5 |4 {& p; c3 G/ G( S
        VariantInit(&pokeVariant[2]);
' K# b4 Z( L' n        pokeVariant[2].vt                 = VT_BSTR;* _3 m. T) k& Z% A
        pokeVariant[2].bstrVal         = topicStr;
6 x( p$ l: j" _5 N7 @, @7 V( `, M7 F
//        Set the DISPPARAMS structure that holds the variant.8 w* c; Y  j, F

0 b; U1 S: k3 f7 |; G) \, @. I        dp.rgvarg                                         = pokeVariant;
6 O* q/ K5 m0 \" v( I% r2 y        dp.cArgs                                         = 3;
/ F# q2 z. A5 E' u8 K$ D# C8 U        dp.rgdispidNamedArgs                 = NULL;
% K# o% |+ a& E0 g) N        dp.cNamedArgs                                 = 0;; l1 K" \2 \. j( p* P" l% @& U
* A! M( B- i0 a5 X
//        Call IDispatch::Invoke()) C% @) M6 e1 Q0 B1 _2 C

5 n! x* f; b9 k7 ^) q2 u        hr = m_pDisp->Invoke(
  y9 ?  R- c9 R                pokeID,. N# O. A9 s) N) }. j1 L3 h
                IID_NULL,
2 w9 G4 [$ n$ g7 L1 M& X5 ]                LOCALE_SYSTEM_DEFAULT,, r: s3 H# u! X- t/ x4 {2 _  U
                DISPATCH_METHOD,9 |+ |1 E2 F2 ^) d# ~9 \
                &dp,3 [7 E# e  J+ F
                NULL,
: y7 M# j5 }! S* _$ ~                &ei,/ ~+ @5 }( C* |9 F! l2 e/ C/ a
                &uiErr);
1 y1 u" y" [$ w9 M2 J4 v& F5 b# K. G8 U9 W. L: z& @
        SysFreeString(topicStr);
4 F% ?( c4 E% x3 B+ w  }2 t        SysFreeString(itemStr);
! k0 a( ]; r! O1 k- Y- w        SysFreeString(valueStr);1 m7 _' b8 [) [
4 ^! x/ `. T5 |) y5 U* N
现在这个程序可以实现将1232这个数据发送到extend,extend有一个对话框弹出并出现1232这个数据,不知道这个对话框为什么会弹出并显示这个数据???' w! J; f: b; S9 [0 k1 T
此外我希望将这个数据赋给extend程序里面的一个变量,请问如何实现????& I3 A; h5 z( Y9 x, E
: `2 l) o9 V' @7 y; O
. V# d1 }! }" `
2.这是request的程序# n% X% X( }. w
//  Request a value from Extend
5 a0 a$ Y2 ^* d//7 w; K- b1 W- c* _  A3 q
//        Initialize the variant that will hold the BSTR.  Set the variant's( x% M  B% h% q( F! h, V8 o
//        type flag to indicate the fact that this variant holds a BSTR. Place the" b% ~2 ^" T' J; s) y$ Q# R
//        BSTR into the variant structure.* }4 D4 q1 u& |+ Q2 R0 |
7 B* T+ `" C! ?% b( c' E
        requestVariant                                 = (VARIANTARG *)malloc(sizeof(VARIANTARG) *2);
: p: ^8 P3 f- p2 M8 m) G2 e$ n       
8 p4 ^* M: s% i9 L: g- {         itemStr                                         = SysAllocString((WCHAR *) L"global0:#0:0:0:0:0");% [7 L( K2 h: z, ~7 Q
        VariantInit(&requestVariant[0]); + V  K; [; U8 J5 _& V
        requestVariant[0].vt                 = VT_BSTR;. J: O; u0 a7 ?8 v: N; w% [
        requestVariant[0].bstrVal         = itemStr;8 r7 E# z1 }6 S

$ I+ S) Q6 t& u4 E9 g          topicStr                                         = SysAllocString((WCHAR *) L"system");
9 v& r8 B) ^, ]6 V' C        VariantInit(&requestVariant[1]);
  b3 m+ h+ P0 J3 T/ e        requestVariant[1].vt                 = VT_BSTR;1 j5 f1 }2 r0 a  Y/ ]* y. W
        requestVariant[1].bstrVal         = topicStr;/ Y" D0 A% C$ F& g) X

6 |5 ?7 l% h: k) k//        Set the DISPPARAMS structure that holds the variant.
  q0 }5 Y8 ?8 i0 y: i8 s" F
/ p1 T4 V# [) t7 K        dp2.rgvarg                                         = requestVariant;$ b/ t6 u) c5 M& M  h% C* L
        dp2.cArgs                                         = 2;& ]: g9 n& o* q' s
        dp2.rgdispidNamedArgs                 = NULL;
4 v/ u# v. [7 @* Q        dp2.cNamedArgs                                 = 0;# `( s) W6 e" x! N$ X

! |& N& V0 M* Q. O7 S         var.vt = VT_EMPTY;/ n0 f1 c' d  u! M, V

7 z) W2 S( r3 o5 t7 t3 _* L//        Call IDispatch::Invoke()
' I9 z6 K- I% d5 X0 E+ J
, I9 ~! K( W( A& r6 o% B        hr = m_pDisp->Invoke(% s9 }9 u& @2 H& q
                requestID,% X1 X) n( s9 Q0 A- N
                IID_NULL,* v7 ]4 y  n0 X5 m  W% M
                LOCALE_SYSTEM_DEFAULT,
! F/ S: x1 p, r" G                DISPATCH_METHOD,
- ^  i6 ^5 a, l                &dp2,
+ G; d+ f. r1 Y8 f; p: n                &var,/ q' \% b. ?, O& q- `# K! f
                &ei,' g9 U9 W) w6 \% S5 Y" D8 J
                &uiErr);% ~5 s  k6 V1 I6 }* Z7 T/ m+ f( e. L
! A( F' W; g, g0 R, g) `- t
        SysFreeString(topicStr);: E# u" L+ T' R: O8 a' A# T5 H
        SysFreeString(itemStr);' J6 [6 x: W9 @, L
请问该程序是获得extend里面的哪个值?' n0 j( J! ]  D' ^
如果我希望获得extend程序里面的某个变量的数值,那个c++程序应该如何实现????

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

本版积分规则

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

GMT+8, 2026-8-8 13:00 , Processed in 0.017377 second(s), 12 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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