library dll;
uses
SysUtils,Classes;
{$R *.RES}
function TestDll(const a: string;t:Longint):Longint;stdcall;
begin
if ((a = '')or( t<5)) then Exit;
result:= Sqr(strtoint64(a) - t);
end;
exports
TestDll;
begin
end.
Private Declare Function TestDll Lib "dll.dll" (ByVal a As String, ByVal t As Long) As longPrivate Sub Command1_Click()
Text3 = "34612795304820"'这个值是 5883264*5883264+11124得到的,所以不会出现其他的问题.
msgbox TestDll(Text3.Text, 11124
End Sub
'返回结果要求是 5883264现在还是搞不定,一运算结果就错了,
uses
SysUtils,Classes;
{$R *.RES}
function TestDll(const a: string;t:Longint):Longint;stdcall;
begin
if ((a = '')or( t<5)) then Exit;
result:= Sqr(strtoint64(a) - t);
end;
exports
TestDll;
begin
end.
Private Declare Function TestDll Lib "dll.dll" (ByVal a As String, ByVal t As Long) As longPrivate Sub Command1_Click()
Text3 = "34612795304820"'这个值是 5883264*5883264+11124得到的,所以不会出现其他的问题.
msgbox TestDll(Text3.Text, 11124
End Sub
'返回结果要求是 5883264现在还是搞不定,一运算结果就错了,
解决方案 »
- exe生成exe文件问题,功能有如下载者生成器的味道,知道的帮忙下,不过不是做那个、
- vb中如何改下ms-sql数据库表中问题
- 如何简单实现text控件根据算式自动计算?
- 关于textout输出到打印机实现输出文本的定位
- 请教,什么是公有声明public,什么是私有声明private
- xp下怎么取得我的文档的路径
- 打印问题!!!
- 【100求救】如何将PictureBox中的图片存储到Access库中(不使用临时文件)??
- **** VB写的东方万年历软件开始发行。来者有分 ****
- 打开文件的问题
- 高手们来看看!
- msflexgrid+data1所遇到的问题(也是一个很值得大家去研究的一个问题)!!
t定义成Long会溢出 ,定义成Currency不会溢出,这需要修改delphi DLL源码。
将5883264*5883264改成:5883264^2试一下
Text3 = "34612795304820"'发送过去.这个值是 5883264*5883264+11124得到的,所以不会出现其他的问题.
msgbox TestDll(Text3.Text, 11124)
End Sub
这上面发送过去不会有问题.
但是到了DLL里面运算以后返回的值不是5883264了,
library dll;
uses
SysUtils,Classes;
{$R *.RES}
function TestDll(const a: string;t:Longint):Longint;stdcall;
begin
if ((a = '')or( t <5)) then Exit;
result:= Sqr(strtoint64(a) - t);
end;
exports
TestDll;
begin
end.
result:= Sqr(strtoint64(a) - t); ------> result:=100* Sqr((strtoint64(a) - t)/10000);
我还是详细说一下吧,
Text3 = "34612795304820"'这个值是 5883264*5883264+11124得到的,
msgbox TestDll(Text3.Text, 11124) 这里到DLL里面去了,.发送过去的text3的值我这里是固定的为了方便. result:= Sqr(strtoint64(a) - t); 这个就反出来结果 上面的算法是+11124 所以在这里就减11124 然后在sqr函数就变成5883264的结果了.为什么用strtoint64()呢,因为发送过来的是string接收也是一样,如果要经过加减运算起码一点就是要把string转成int后才行. 在VB里面很简单,只要int(string)就可以转过来了,但是delphi里不知道什么地方出了错误.,不是结果不对,就是返回付数,要么就是一运算就死了.
MsgBox TestDll("34612795304820", 11124)
End Sublibrary dll;
uses
SysUtils,Classes;
{$R *.RES}
function TestDll(const a: string;t:Longint):Longint;stdcall;
begin
if ((a = '')or( t<5)) then Exit;
result:= strtoint64(a);
end;
exports
TestDll;
begin
end.我自己写不运算返回的结果都是付数.
为什么返回去的是负数呢.,
uses
SysUtils,Classes;
{$R *.RES}
function TestDll(const a: string;t:Longint):Longint;stdcall;
begin
//if ((a = '')or( t<5)) then Exit;
result:= Sqr(strtoint64('34612795304820')- 11124) ;
end;
exports
TestDll;
begin
end.我直接这样写,返回的结果是 268435456.却不是 5883264 只又是什么问题呢,我用计算器计算出来的结果是5883264但程序里面就不对了.