Y
Yves
Unregistered / Unconfirmed
GUEST, unregistred user!
一个奇怪的问题,关于dll,我不懂,大家教我.
我前几天,看了篇文章,是关于用delphi调用vc写的dll的,
整个程序是比较3个数的大小,选出其中最大和最小的,
delphi负责界面的事情,界面上有三个文本框,输入欲比较的3个数,另有两个文本框输出比较结果,一个按钮是开始比较
源程序如下
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TTestVcDLLForm = class(TForm)
GroupBox1: TGroupBox;
edtInt1: TEdit;
edtInt2: TEdit;
edtInt3: TEdit;
GroupBox2: TGroupBox;
edtMax: TEdit;
edtMin: TEdit;
btnRun: TButton;//上边就是这些界面控件
procedure btnRunClick(Sender: TObject);//这个是那个button
private
{ Private declarations }
public
{ Public declarations }
end;
var
TestVcDLLForm: TTestVcDLLForm;
implementation
uses maxmin
//接口单元,内容见后
{$R *.dfm}
procedure TTestVcDLLForm.btnRunClick(Sender: TObject);
begin
edtMax.Text:=IntToStr(Max1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text)))
//调用动态链接库中的函数Max1
edtMin.Text:=IntToStr(Min1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text)))
//调用动态链接库中的函数Min1
end;
end.
//下面是接口单元
unit maxmin;
interface
function Min1(x,y,z:Integer):Integer
stdcall
function Max1(x,y,z:Integer):Integer
stdcall
implementation
function Min1;external 'MaxMin.DLL' name 'Min1';
function Max1;external 'MaxMin.DLL' name 'Max1'
end.
vc写的dll就不列出了,就是求三个数中的一个大数,一个小数
按照这样运行,很正常,特好,但是
我给改了一下就不正常了:
我把函数声明也就是:
function Min1(x,y,z:Integer):Integer
stdcall
function Max1(x,y,z:Integer):Integer
stdcall
放到了类TTestVcDLLForm的public里
把
function Min1;external 'MaxMin.DLL' name 'Min1';
function Max1;external 'MaxMin.DLL' name 'Max1'
放到了
implementation
后面
并且废弃了对maxmin的引用
改成了:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TTestVcDLLForm = class(TForm)
GroupBox1: TGroupBox;
edtInt1: TEdit;
edtInt2: TEdit;
edtInt3: TEdit;
GroupBox2: TGroupBox;
edtMax: TEdit;
edtMin: TEdit;
btnRun: TButton;
procedure btnRunClick(Sender: TObject);
private
{ Private declarations }
public //这里
function Min1(x,y,z:Integer):Integer
stdcall;
function Max1(x,y,z:Integer):Integer
stdcall
{ Public declarations }
end;
var
TestVcDLLForm: TTestVcDLLForm;
implementation
//uses maxmin
这里
{$R *.dfm}
//和这里
function TTestVcDLLForm.Min1;external 'MaxMin.DLL' name 'Min1';
function TTestVcDLLForm.Max1;external 'MaxMin.DLL' name 'Max1';
procedure TTestVcDLLForm.btnRunClick(Sender: TObject);
begin
edtMax.Text:=IntToStr(Max1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text)))
//调用动态链接库中的函数Max1
edtMin.Text:=IntToStr(Min1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text)))
//调用动态链接库中的函数Min1
end;
end.
然后运行程序就不行,输出的最小值是正确的,但最大值不对,而且不管输入什么数,输出的最大值就是一个固定的数(特离谱的一个数)
为什么呢,大家教我!
我前几天,看了篇文章,是关于用delphi调用vc写的dll的,
整个程序是比较3个数的大小,选出其中最大和最小的,
delphi负责界面的事情,界面上有三个文本框,输入欲比较的3个数,另有两个文本框输出比较结果,一个按钮是开始比较
源程序如下
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TTestVcDLLForm = class(TForm)
GroupBox1: TGroupBox;
edtInt1: TEdit;
edtInt2: TEdit;
edtInt3: TEdit;
GroupBox2: TGroupBox;
edtMax: TEdit;
edtMin: TEdit;
btnRun: TButton;//上边就是这些界面控件
procedure btnRunClick(Sender: TObject);//这个是那个button
private
{ Private declarations }
public
{ Public declarations }
end;
var
TestVcDLLForm: TTestVcDLLForm;
implementation
uses maxmin
//接口单元,内容见后
{$R *.dfm}
procedure TTestVcDLLForm.btnRunClick(Sender: TObject);
begin
edtMax.Text:=IntToStr(Max1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text)))
//调用动态链接库中的函数Max1
edtMin.Text:=IntToStr(Min1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text)))
//调用动态链接库中的函数Min1
end;
end.
//下面是接口单元
unit maxmin;
interface
function Min1(x,y,z:Integer):Integer
stdcall
function Max1(x,y,z:Integer):Integer
stdcall
implementation
function Min1;external 'MaxMin.DLL' name 'Min1';
function Max1;external 'MaxMin.DLL' name 'Max1'
end.
vc写的dll就不列出了,就是求三个数中的一个大数,一个小数
按照这样运行,很正常,特好,但是
我给改了一下就不正常了:
我把函数声明也就是:
function Min1(x,y,z:Integer):Integer
stdcall
function Max1(x,y,z:Integer):Integer
stdcall
放到了类TTestVcDLLForm的public里
把
function Min1;external 'MaxMin.DLL' name 'Min1';
function Max1;external 'MaxMin.DLL' name 'Max1'
放到了
implementation
后面
并且废弃了对maxmin的引用
改成了:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TTestVcDLLForm = class(TForm)
GroupBox1: TGroupBox;
edtInt1: TEdit;
edtInt2: TEdit;
edtInt3: TEdit;
GroupBox2: TGroupBox;
edtMax: TEdit;
edtMin: TEdit;
btnRun: TButton;
procedure btnRunClick(Sender: TObject);
private
{ Private declarations }
public //这里
function Min1(x,y,z:Integer):Integer
stdcall;
function Max1(x,y,z:Integer):Integer
stdcall
{ Public declarations }
end;
var
TestVcDLLForm: TTestVcDLLForm;
implementation
//uses maxmin
这里
{$R *.dfm}
//和这里
function TTestVcDLLForm.Min1;external 'MaxMin.DLL' name 'Min1';
function TTestVcDLLForm.Max1;external 'MaxMin.DLL' name 'Max1';
procedure TTestVcDLLForm.btnRunClick(Sender: TObject);
begin
edtMax.Text:=IntToStr(Max1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text)))
//调用动态链接库中的函数Max1
edtMin.Text:=IntToStr(Min1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text)))
//调用动态链接库中的函数Min1
end;
end.
然后运行程序就不行,输出的最小值是正确的,但最大值不对,而且不管输入什么数,输出的最大值就是一个固定的数(特离谱的一个数)
为什么呢,大家教我!