调用动态库
原型:function ReadDataForShow(vStationID: integer; vGetDate: TDateTime; vValueID: integer; vHistoryData: Array of Real): integer;stdcall;external 'DataHistoryDll.dll';调用:
procedure TForm1.Button3Click(Sender: TObject);
var
lpData: array of Real;
lsData: String;
i: integer;
begin
SetLength(lpData,400);
ReadDataForShow(1,StrToDate(Trim(Edit1.Text)),1,lpData);
Memo1.Lines.Clear;
for i:= 0 to Length(lpData) - 1 do
Memo1.Lines.Add(FloatToStr(lpData[i]));
end;
在动态库中直接操作该数组,跟踪可以看到值的变化
为什么在调用处却没反映呢?
是语法不对吗?
原型:function ReadDataForShow(vStationID: integer; vGetDate: TDateTime; vValueID: integer; vHistoryData: Array of Real): integer;stdcall;external 'DataHistoryDll.dll';调用:
procedure TForm1.Button3Click(Sender: TObject);
var
lpData: array of Real;
lsData: String;
i: integer;
begin
SetLength(lpData,400);
ReadDataForShow(1,StrToDate(Trim(Edit1.Text)),1,lpData);
Memo1.Lines.Clear;
for i:= 0 to Length(lpData) - 1 do
Memo1.Lines.Add(FloatToStr(lpData[i]));
end;
在动态库中直接操作该数组,跟踪可以看到值的变化
为什么在调用处却没反映呢?
是语法不对吗?
//DLl中的函数要是能改变实参的.
//--------------------------------
这样呢?在DLL中对vHistoryData进行了操作
调用后,值根本就不对为什么,难到传过去的不是该数组的首地址吗?
function ReadDataForShow(vStationID: integer; vGetDate: TDateTime; vValueID: integer; vHistoryData: Pointer):
看看~~~~~
到了程序里面,在转换成Array。
传入参数的时候,写“@myArray[1]”
function ReadDataForShow(vStationID: integer; vGetDate: TDateTime; vValueID: integer; var vHistoryData: Array of Real): integer;stdcall;external 'DataHistoryDll.dll';lpData: array of Real;
ReadDataForShow(1,StrToDate(Trim(Edit1.Text)),1,lpData);要有一个全局的数组定义 FAReal:Array of Real才行,否则 vHistoryData、lpData并不认为是同一数据类型