VB 调用delphi DLL

waxfdx 2008-03-27 12:53:04
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 long

Private Sub Command1_Click()
Text3 = "34612795304820"'这个值是 5883264*5883264+11124得到的,所以不会出现其他的问题.
msgbox TestDll(Text3.Text, 11124
End Sub
'返回结果要求是 5883264

现在还是搞不定,一运算结果就错了,
...全文
99 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
waxfdx 2008-03-27
  • 打赏
  • 举报
回复
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('34612795304820')- 11124) ;
end;
exports
TestDll;
begin
end.

我直接这样写,返回的结果是 268435456.却不是 5883264 只又是什么问题呢,我用计算器计算出来的结果是5883264但程序里面就不对了.
waxfdx 2008-03-27
  • 打赏
  • 举报
回复
result:= Sqr(strtoint64('34612795304820')- 11124) 得出来的结果 是 5883264 啊,才7位.
为什么返回去的是负数呢.,
waxfdx 2008-03-27
  • 打赏
  • 举报
回复
那应该改成什么类型呢?也用string 返回?
东方之珠 2008-03-27
  • 打赏
  • 举报
回复
65536*65536=4294967296(最大数)
东方之珠 2008-03-27
  • 打赏
  • 举报
回复
很明显:result:= strtoint64(a)错了,result是Long型,不会超过11位
waxfdx 2008-03-27
  • 打赏
  • 举报
回复
Private Declare Function TestDll Lib "dll.dll" (ByVal a As String, ByVal t As Long) As Long

Private Sub Command1_Click()
MsgBox TestDll("34612795304820", 11124)
End Sub

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:= strtoint64(a);
end;
exports
TestDll;
begin
end.

我自己写不运算返回的结果都是付数.
东方之珠 2008-03-27
  • 打赏
  • 举报
回复
你查一下delph资料, strtoint64(a)-t这个运算的结果是不是超过了delph规定的位数
waxfdx 2008-03-27
  • 打赏
  • 举报
回复
strtoint64(a)-t 这句是把a:string转成数字,然后在减去11124 sqr是开方 因为我上面"34612795304820"'这个值是 5883264*5883264+11124得到的所以不会出现浮点 得到的都是整数.都知道"34612795304820"这么长的数字在VB里面只能是string传过来,然后到DLL里面接收以后在转换在运算 ,我用com dll写的就是直接用int(a)就可以了,没有任何问题,只是想写个标准的DLL所以用delphi,结果问题多多,哎.
东方之珠 2008-03-27
  • 打赏
  • 举报
回复
delphi我不会,我问一下:strtoint64(a)-t这个运算的结果是什么类型?而Sqr()应该是浮点型吧!再说开方也不应该返回负数!而你定义的结果类型是Long,需要转换类型!
waxfdx 2008-03-27
  • 打赏
  • 举报
回复
呵呵result:= Sqr(strtoint64(a) - t); ------> result:=100* Sqr((strtoint64(a) - t)/10000); 修改以后DLL编译都通不过了.
我还是详细说一下吧,
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里不知道什么地方出了错误.,不是结果不对,就是返回付数,要么就是一运算就死了.
东方之珠 2008-03-27
  • 打赏
  • 举报
回复
上面错了:
result:= Sqr(strtoint64(a) - t); ------> result:=100* Sqr((strtoint64(a) - t)/10000);
东方之珠 2008-03-27
  • 打赏
  • 举报
回复
result:= Sqr(strtoint64(a) - t); ------> result:=10000* Sqr((strtoint64(a) - t)/10000);

waxfdx 2008-03-27
  • 打赏
  • 举报
回复
Private Declare Function TestDll Lib "dll.dll" (ByVal a As String, ByVal t As Long) As long

Private Sub Command1_Click()
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.
东方之珠 2008-03-27
  • 打赏
  • 举报
回复
Text3.Text=CCur(5883264^2+11124)
东方之珠 2008-03-27
  • 打赏
  • 举报
回复
是msgbox TestDll(Text3.Text, 11124)出错,还是5883264*5883264+11124运算出错?
将5883264*5883264改成:5883264^2试一下
waxfdx 2008-03-27
  • 打赏
  • 举报
回复
这里的t是只有5-6位啊, a才有16位差不多,
东方之珠 2008-03-27
  • 打赏
  • 举报
回复
Private Declare Function TestDll Lib "dll.dll" (ByVal a As String, ByVal t As Long) As long
t定义成Long会溢出 ,定义成Currency不会溢出,这需要修改delphi DLL源码。
waxfdx 2008-03-27
  • 打赏
  • 举报
回复
是的,所以不知道怎么改才好,5883264*5883264+11124=34612795293696 有可能还要多一位,麻烦帮我看下.
东方之珠 2008-03-27
  • 打赏
  • 举报
回复
5883264*5883264=34612795293696,超过了11位,应该溢出了。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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