我从Delphi中调用COM组件,为何出现这个问题? 恳求帮助,在线等(100分)

yuanqingfei 2004-09-10 03:29:03
大家好,我现在正在做我的硕士论文,基本思路是从Delphi中调用Matlab制作的COM组件,现在COM组件已经制作好了,可是在Delphi中调用时老是出现错误: External Exception : E06D7363,
有关信息如下:

在Matlab中可以正确允许:
>> [A,area,density,standard,Qj,n,Hcrl,L,Hgrd,Zx,Zy,popsize,gen]=data2;
>> [HH,h,il,D,cmd,I,v,total,cost,pipeL,TL]=totalprocess(A,area,...
density,standard,Qj,n,Hcrl,L,Hgrd,Zx,Zy,popsize,gen)

HH(:,:,1) =...(帖子内容太长,在此省略)
h =

Columns 1 through 9

0.0489 0.0944 0.1303 0.1375 0.1375 0.1650 0.2204 0.2600 0.4900

Columns 10 through 18

0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.4900 0.6300 0.2600

Columns 19 through 25

0.3194 0.4376 0.4467 0.4735 0.4888 0.5001 0.7730


。。。。。。


TL =

6.7907e+003

>>


其中的data2文件:
function [A,area,density,standard,Qj,n,Hcrl,L,Hgrd,Zx,Zy,popsize,gen]=data2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for Q=liuliang(A,Qb,Qj) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
A=[
1 2
2 3
3 4
4 5
5 6
6 15
7 8
8 9
9 10
10 11
11 12
12 13
13 14
14 15
15 16
16 17
17 25
18 19
19 20
20 21
21 22
22 23
23 24
24 25
25 26
]; %各管段起止节点号

area=[
1.67
5.05
6.77
2.11
2.11
7.09
0
0
2.64
23.95
19.45
2.86
11.06
4.07
3.96
3.41
3.43
0
0
0
5.36
20.03
12.67
9.62
3.39
];% 注意面积对应的是管段起始的节点

Qj=[
0
0
0
0
0
0
44
29
216.9
0
0
0
0
0
0
0
0
66.4
56
142
0
0
0
0
0

];% 各管段不是直接从“计算上游”获得的集中流量流量
%单位是L/s,还要注意这个数据是按照节点的顺序来的
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%for [HHH,HH,h,il]=gaocheng(n,Q,D,L,A,cmd,Hcrl,i,Hgrd) %%%%%%%%%%

L=[
316.23
347.31
301.04
180.28
422.97
476.34
246.22
269.26
325
395.28
360.56
246.22
208.93
172.19
347.31
158.11
167.71
111.8
292.62
134.63
134.63
279.51
325
357.95
213.6
];
Hgrd=[
152.53
152.23
151.74
151.13
150.72
150.36
150.83
150.61
150.37
150.29
150.75
150.72
150.42
150.05
149.58
148.7
148
150.02
149.8
149.78
149.78
149.28
148.46
148.52
149
149
];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
density=400;
standard=120;
n=0.014;
Hcrl=1.3;
Zx=0;
Zy=0;
popsize=15;
gen=20;


在Matlab中运行没有问题,我把totalprocess这个函数用comtool做成了COM组件,其基本信息如下:
Name - PAISHUI910
Version
1.0
Type Library: Paishui910 1.0 Type Library
Library ID: {298EA5CC-DD14-4A37-9B59-1A435F847B56}
File Name: D:\MATLAB7\work\myproject2\Paishui910\distrib\Paishui910_1_0.dll
Classes
Name: Paishui910class
Class ID: {CFF50E02-A29B-444D-B5D2-B9FEA90C78EA}
Program ID: Paishui910.Paishui910class.1_0
In Process Server: D:\MATLAB7\work\myproject2\Paishui910\distrib\Paishui910_1_0.dll
Methods
function [HH, h, il, D, cmd, I, v, total, cost, pipeL, TL] = totalprocess(A, area, density, standard, Qj, n, Hcrl, L, Hgrd, Zx, Zy, popsize, gen)
Properties
Events
Interfaces
Name: IPaishui910class
Interface ID: {A253C3E1-1EE0-40DE-A1C3-0BD1E5D73392}

...全文
296 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanqingfei 2004-09-11
  • 打赏
  • 举报
回复
楼上的,我不明白OleCheck(ObjectContext.CreateInstance(CLASS_Paishui910class, IID_IPaishui910class, Paishui910class));
是什么意思,但是你说的对,问题就在这里,其实这也是整个问题的核心所在,我就是要调用COM(PaishuiApp)中的totalprocess的方法从而得到里面的参数的值,参数里面的第一个数(11)代表输出量的个数,其余的就是代表要输入的了,我其他的都输入了,为什么还是不行?

另外,我有过成功调用的例子,虽然那里只是涉及一维数组,恳求那位再给点启发,谢谢
RuinRice 2004-09-10
  • 打赏
  • 举报
回复
问题可能处在你最后的那段程序
PaishuiApp := TPaishui910class.Create(Form1);
PaishuiApp.totalprocess(11, HH, h, il, D, cmd, I, v, total, cost, pipeL, TL, A, area, density, standard,
Qj, n, Hcrl, L, Hgrd, Zx, Zy, popsize, gen);
PaishuiApp.FreeInstance;
改为:

OleCheck(ObjectContext.CreateInstance(CLASS_Paishui910class, IID_IPaishui910class, Paishui910class));
试一试
changlin365 2004-09-10
  • 打赏
  • 举报
回复
up
ghy412 2004-09-10
  • 打赏
  • 举报
回复
俺没上过大学,帮不了你了 只能帮你顶了!
yuanqingfei 2004-09-10
  • 打赏
  • 举报
回复
我是用如下Delphi程序进行调用的:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Paishui910_TLB;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }

public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
HH, h, il, D, cmd, I, v, total, cost, pipeL, TL, A, area, density, standard, Qj, n, Hcrl, L, Hgrd,
Zx, Zy, popsize, gen: OleVariant;

PaishuiApp: TPaishui910class;

begin
density := 400;
standard := 120;
n := 0.014;
Hcrl := 1.3;
Zx := 0;
Zy := 0;
popsize := 15;
gen := 20;

A := VarArrayCreate([1, 25, 1, 2], varDouble);
area := VarArrayCreate([1, 25, 1, 1], varDouble);
Qj := VarArrayCreate([1, 25, 1, 1], varDouble);
L := VarArrayCreate([1, 25, 1, 1], varDouble);
Hgrd := VarArrayCreate([1, 26, 1, 1], varDouble);

A[1, 1] := 1;
A[2, 1] := 2;
A[3, 1] := 3;
A[4, 1] := 4;
A[5, 1] := 5;
A[6, 1] := 6;
A[7, 1] := 7;
A[8, 1] := 8;
A[9, 1] := 9;
A[10, 1] := 10;
A[11, 1] := 11;
A[12, 1] := 12;
A[13, 1] := 13;
A[14, 1] := 14;
A[15, 1] := 15;
A[16, 1] := 16;
A[17, 1] := 17;
A[18, 1] := 18;
A[19, 1] := 19;
A[20, 1] := 20;
A[21, 1] := 21;
A[22, 1] := 22;
A[23, 1] := 23;
A[24, 1] := 24;
A[25, 1] := 25;
A[1, 2] := 2;
A[2, 2] := 3;
A[3, 2] := 4;
A[4, 2] := 5;
A[5, 2] := 6;
A[6, 2] := 15;
A[7, 2] := 8;
A[8, 2] := 9;
A[9, 2] := 10;
A[10, 2] := 11;
A[11, 2] := 12;
A[12, 2] := 13;
A[13, 2] := 14;
A[14, 2] := 15;
A[15, 2] := 16;
A[16, 2] := 17;
A[17, 2] := 25;
A[18, 2] := 19;
A[19, 2] := 20;
A[20, 2] := 21;
A[21, 2] := 22;
A[22, 2] := 23;
A[23, 2] := 24;
A[24, 2] := 25;
A[25, 2] := 26;


area[1, 1] := 1.67;
area[2, 1] := 5.05;
area[3, 1] := 6.77;
area[4, 1] := 2.11;
area[5, 1] := 2.11;
area[6, 1] := 7.09;
area[7, 1] := 0;
area[8, 1] := 0;
area[9, 1] := 2.64;
area[10, 1] := 23.95;
area[11, 1] := 19.45;
area[12, 1] := 2.86;
area[13, 1] := 11.06;
area[14, 1] := 4.07;
area[15, 1] := 3.96;
area[16, 1] := 3.41;
area[17, 1] := 3.43;
area[18, 1] := 0;
area[19, 1] := 0;
area[20, 1] := 0;
area[21, 1] := 5.36;
area[22, 1] := 20.03;
area[23, 1] := 12.67;
area[24, 1] := 9.62;
area[25, 1] := 3.39;


Qj[1, 1] := 0;
Qj[2, 1] := 0;
Qj[3, 1] := 0;
Qj[4, 1] := 0;
Qj[5, 1] := 0;
Qj[6, 1] := 0;
Qj[7, 1] := 44;
Qj[8, 1] := 29;
Qj[9, 1] := 216.9;
Qj[10, 1] := 0;
Qj[11, 1] := 0;
Qj[12, 1] := 0;
Qj[13, 1] := 0;
Qj[14, 1] := 0;
Qj[15, 1] := 0;
Qj[16, 1] := 0;
Qj[17, 1] := 0;
Qj[18, 1] := 66.4;
Qj[19, 1] := 56;
Qj[20, 1] := 142;
Qj[21, 1] := 0;
Qj[22, 1] := 0;
Qj[23, 1] := 0;
Qj[24, 1] := 0;
Qj[25, 1] := 0;


L[1, 1] := 316.23;
L[2, 1] := 347.31;
L[3, 1] := 301.04;
L[4, 1] := 180.28;
L[5, 1] := 422.97;
L[6, 1] := 476.34;
L[7, 1] := 246.22;
L[8, 1] := 269.26;
L[9, 1] := 325;
L[10, 1] := 395.28;
L[11, 1] := 360.56;
L[12, 1] := 246.22;
L[13, 1] := 208.93;
L[14, 1] := 172.19;
L[15, 1] := 347.31;
L[16, 1] := 158.11;
L[17, 1] := 167.71;
L[18, 1] := 111.8;
L[19, 1] := 292.62;
L[20, 1] := 134.63;
L[21, 1] := 134.63;
L[22, 1] := 279.51;
L[23, 1] := 325;
L[24, 1] := 357.95;
L[25, 1] := 213.6;

Hgrd[1, 1] := 152.53;
Hgrd[2, 1] := 152.23;
Hgrd[3, 1] := 151.74;
Hgrd[4, 1] := 151.13;
Hgrd[5, 1] := 150.72;
Hgrd[6, 1] := 150.36;
Hgrd[7, 1] := 150.83;
Hgrd[8, 1] := 150.61;
Hgrd[9, 1] := 150.37;
Hgrd[10, 1] := 150.29;
Hgrd[11, 1] := 150.75;
Hgrd[12, 1] := 150.72;
Hgrd[13, 1] := 150.42;
Hgrd[14, 1] := 150.05;
Hgrd[15, 1] := 149.58;
Hgrd[16, 1] := 148.7;
Hgrd[17, 1] := 148;
Hgrd[18, 1] := 150.02;
Hgrd[19, 1] := 149.8;
Hgrd[20, 1] := 149.78;
Hgrd[21, 1] := 179.78;
Hgrd[22, 1] := 149.28;
Hgrd[23, 1] := 148.46;
Hgrd[24, 1] := 148.52;
Hgrd[25, 1] := 149;
Hgrd[26, 1] := 149;

ShowMessage(FloatToStr(A[1,2]));
ShowMessage(FloatToStr(Hgrd[3,1]));
PaishuiApp := TPaishui910class.Create(Form1);
PaishuiApp.totalprocess(11, HH, h, il, D, cmd, I, v, total, cost, pipeL, TL, A, area, density, standard,
Qj, n, Hcrl, L, Hgrd, Zx, Zy, popsize, gen);
PaishuiApp.FreeInstance;

//ShowMessage(FloatToStr(total));
end;

end.


问题就是现在老是说有外部异常,很着急,恳求帮助,谢谢,100分送上,不够再加!

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧