调用动态库
原型: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;
在动态库中直接操作该数组,跟踪可以看到值的变化
为什么在调用处却没反映呢?
是语法不对吗?

解决方案 »

  1.   

    function ReadDataForShow(vStationID: integer; vGetDate: TDateTime;  vValueID: integer;     var         vHistoryData: Array of Real):   integer;stdcall;external 'DataHistoryDll.dll';
    //DLl中的函数要是能改变实参的.
      

  2.   

    function ReadDataForShow(vStationID: integer; vGetDate: TDateTime;  vValueID: integer; vHistoryData: Array of Real):   integer;stdcall;external 'DataHistoryDll.dll';
    //--------------------------------
    这样呢?在DLL中对vHistoryData进行了操作
      

  3.   

    function ReadDataForShow(vStationID: integer; vGetDate: TDateTime;  vValueID: integer; vHistoryData: PChar);然后调用处传递了一个array[0..400] of Char类型的参数,
    调用后,值根本就不对为什么,难到传过去的不是该数组的首地址吗?
      

  4.   

    你改为
    function ReadDataForShow(vStationID: integer; vGetDate: TDateTime;  vValueID: integer; vHistoryData: Pointer):
    看看~~~~~
    到了程序里面,在转换成Array。
    传入参数的时候,写“@myArray[1]”
      

  5.   

    SetLength(lpData,400);这样写就不要定义为动态数组。
      

  6.   

    你这种定义、调用方式是错误的:
    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并不认为是同一数据类型