Hallo zusammen!
Ich wollte ein dynamisches Array of Integer in einer dynamischen DLL verarbeiten,
aber es kommt immer eine Fehlermeldung : Ungültige Zeigeroperation
(Obwohl die richtigen Werte zurück übergeben werden)
Was ist hier im Code falsch?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TNArray = array of Integer; TDLLFunktion = function(var ListOfNumbers:TErrorsArray):Boolean; TForm1 = class(TForm) ... end;
var Form1: TForm1; Zahlenfeld : TDLLFunktion; DLLHandle : THandle;
implementation
{$R *.dfm}
procedure TForm1.ButtonClick(Sender: TObject); var ListOfNumbers : TNArray; DLLEnable : Boolean; begin DLLEnable := true; try DLLHandle := LoadLibrary(PChar('Test.dll')); except on E:Exception do DLLEnable := false; end; @Zahlenfeld := GetProcAddress(DLLHandle,'Zahlenfeld'); if @Zahlenfeld=nil then DLLEnable := false;
if DLLEnable then Zahlenfeld(ListOfNumbers); ...
FreeLibrary(DLLHandle); end;
end. |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| library Test;
uses Windows, Classes, SysUtils;
type TNArray = array of Integer;
{$R *.res}
function Zahlenfeld(var ListOfNumbers:TNArray):Boolean; export; begin SetLength(ListOfNumbers,2); ListOfNumbers[0]:=123; ListOfNumbers[1]:=45678; result := true; end;
exports Zahlenfeld;
begin end. |
Gruß SweetSharky