调用dll函数(返回值为Double,函数中未用到过string)出现"Invalid Pointer Operation错误(100)

  • 主题发起人 明月松间
  • 开始时间

明月松间

Unregistered / Unconfirmed
GUEST, unregistred user!
自己写了一个数学矩阵运算函数相关的dll,在dll初始是声明如下: type Vector = array of double
type Matrix2= array of array of double
然后写了一个简单的测试函数 ……写了些求矩阵转置,逆等相关函数,但未对外声明。 function test(inff:Matrix2):Double
stdcall
begin result := inff[0,0]
end
建立了一个工程Project1 引入dll文件 function test(inff:Matrix2):Double
stdcall
external 'dllexample.dll'
添加一个按钮,按纽事件如下: procedure Tfmtest.Button4Click(Sender: TObject)
var tin:Matrix2
outff:Double
begin SetLength(tin,4,2)
tin[0,0]:=0.5;tin[0,1]:=1
tin[1,0]:=-1;tin[1,1]:=-1
tin[2,0]:=-1;tin[2,1]:=0.5
tin[3,1]:=0.5;tin[3,2]:=-1
outff:=test(tin)
Button4.Caption := FloatToStr(outff)
end
调用时出现"Invalid Pointer Operation"错误,但按钮的值已经改变为0.5。 设置断点,程序出错在“Button4.Caption := FloatToStr(outff);”这句(此时outff值已经是0.5)。 不知道为什么,上网找了很多,但是大致都是说在dll中引用了string之类会出现这样的错误,我的dll中没有涉及到任何字符方面的使用,全是数值计算,而且我一开始就将ShareMem单元放在第一个引用单元。 还请高手指点迷津
 
procedure TForm1.Button4Click(Sender: TObject);var tin:Matrix2
outff:Double;begin SetLength(tin,4,2)
tin[0,0]:=0.5;tin[0,1]:=1
tin[1,0]:=-1;tin[1,1]:=-1
tin[2,0]:=-1;tin[2,1]:=0.5
tin[3,1]:=0.5;tin[3,2]:=-1
outff:=0.5
//test(tin)
隐含 Button4.Caption := floattostr(outff);end;不调用函数都出现异常,呵呵
 
tin[3,1]:=0.5;tin[3,2]:=-1
--更改为tin[3,0]:=0.5;tin[3,1]:=-1;
 
楼主在瞎折腾人,按照你的代码,运行一点问题都没有DLL代码library dllexample;uses SysUtils, Classes;type Matrix2= array of array of double;function test(inff:Matrix2):Double
stdcall
begin result := inff[0,0]
end
exports test;beginend.测试代码...implementation{$R *.dfm}type Matrix2= array of array of double;function test(inff:Matrix2):Double
stdcall
external 'dllexample.dll';procedure TForm1.Button4Click(Sender: TObject);var tin:Matrix2
outff:Double;begin SetLength(tin,4,2)
tin[0,0]:=0.5;tin[0,1]:=1
tin[1,0]:=-1;tin[1,1]:=-1
tin[2,0]:=-1;tin[2,1]:=0.5
tin[3,1]:=0.5;tin[3,2]:=-1
outff:=test(tin)
Button4.Caption := FloatToStr(outff);end;在我的电脑上没有问题
 
你把按钮点2次,第二次才出现错误。
 
多谢大家了,znxia给出的是正解
 
顶部