dll的制作? |
尚未結案
|
jchuang
一般會員 發表:41 回覆:36 積分:15 註冊:2003-08-08 發送簡訊給我 |
deal all:
我個了一個dll檔, compiler也沒有問題,可是在run的時,確發生錯誤,為何會如此呢??
//-------------dll的source code( 一)------------
library Project1; uses
SysUtils,
Classes,
Unit2 in 'Delphi include function find max inicial and dynamic array有小數點\Unit2.pas'; exports
ProceInit; exports
Procemax;
{$R *.res} begin
end. //---------------dll的source code(二)------------
unit Unit2; interface
const TestConst = 1000; procedure ProceInit(b:array of real); export;
procedure Procemax(a:array of real;var max1:real);export; var
Input :array of real;
Point :integer; implementation procedure ProceInit(b:array of real);
var idx:integer;
begin
for idx := 0 to Point-1 do
begin
input[idx]:=idx 1;//inicial value
end;
input[4]:=20.98776;
end;
procedure Procemax(a:array of real;var max1:real);
var idx :integer;
temp:real;
begin
Temp := 0;
for idx := 0 to High(a) do
begin
if a[idx]> Temp then
Temp:=a[idx];
end;
Max1 := Temp;
end;
//*************************************************//
end. //--------------------------------------------------
我把上面的兩個檔案以build all projects成一個dll檔
//-------------以下為使用dll檔
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type TForm1 = class(TForm)
Button1: TButton;
Edit3: TEdit;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject); private { Private declarations }
public { Public declarations }
end; var
Form1: TForm1;
procedure ProceInit(b:array of real); far;
external 'project1.dll'
procedure Procemax(a:array of real;var max1:real);far;
external 'project1.dll' const TestConst1=100; var
Input :array of real;
Point1 :integer;
implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
var max :real;
begin Point1 :=StrToInt(edit2.Text);
setLength(input,Point1); //setup dynamic arry length
edit1.Text:=IntToStr(TestConst1); ProceInit(input); //inicital array Procemax(input,max);//find max value edit3.Text:=floattostr(max); end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close();
end; end.
可是run的時卻有問題煩請各位大大幫我看一下,tkx; 新手上路
------
新手上路 |
huwk
資深會員 發表:26 回覆:340 積分:323 註冊:2002-04-03 發送簡訊給我 |
|
xjackeystone
一般會員 發表:0 回覆:2 積分:0 註冊:2005-03-02 發送簡訊給我 |
|
xjackeystone
一般會員 發表:0 回覆:2 積分:0 註冊:2005-03-02 發送簡訊給我 |
|
jchuang
一般會員 發表:41 回覆:36 積分:15 註冊:2003-08-08 發送簡訊給我 |
|
jchuang
一般會員 發表:41 回覆:36 積分:15 註冊:2003-08-08 發送簡訊給我 |
|
huwk
資深會員 發表:26 回覆:340 積分:323 註冊:2002-04-03 發送簡訊給我 |
引言: deal all: input[4]:=20.98776;//只是假設些為最大值 point1是產生動態array的變數 新手上路二個疑問 1.你的proceinit是想初始化傳進來的陣例的值? 若是宣告請加var 2.dll內對Input操作? 應是對傳入的b作操作吧. 改寫如下即可正確運作 procedure ProceInit(var b:array of real); var idx:integer; begin for idx := 0 to high(b)-1 do begin b[idx]:=idx 1;//inicial value end; b[4]:=20.98776; end;
------
熊的學習 http://huwk.blogspot.com |
jchuang
一般會員 發表:41 回覆:36 積分:15 註冊:2003-08-08 發送簡訊給我 |
|
jchuang
一般會員 發表:41 回覆:36 積分:15 註冊:2003-08-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |