Hallo zusammen,
leider habe ich ein Problem, dass ganz vielen Threads hier ähnelt, ich aber dennoch nicht lösen konnte.
Ich habe eine
DLL und entsprechende Header für C und Basic. Diesen habe ich nun einigermaßen übersetzt. Es gibt da aber eine Funktion, die mir eine Liste mit Namen etc zurückgeben soll. Hier die Beschreibungen aus C und Basic:
Code:
KMErrorCode EXPORTFCN KMTCPGetDeviceInformation(char *lpszNameArray[], char *lpszAddressArray[], char *lpszSNArray[], UINT16 DIPArray[], int nNumDevices );
Code:
Declare Function KMTCPGetDeviceInformation Lib "KMAPI32.DLL" (ByVal lpszNameArray As Long, ByVal lpszAddressArray As Long, ByVal lpszSNArray As Long, ByVal DIPArray As Long, ByVal nNumDevices As Long) As Long
Meine Übersetzung lautet ungefähr:
(oben)
Delphi-Quellcode:
KMStringArray = array of string;
KMByteArray = array of longint;
dann...
Delphi-Quellcode:
[DllImport('KMAPI32.DLL', CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=true)]
function KMTCPGetDeviceInformation(var lpszNameArray: KMStringArray; var lpszAddressArray: KMStringArray; var lpszSNArray: KMStringArray; var DIPArray: KMByteArray; nNumDevices: longint):longint; external;
Benutzt wird die Funktion dann hier:
Delphi-Quellcode:
procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
var
num: smallint;
names: KMStringArray;
serials: KMStringArray;
ips: KMStringArray;
dips: KMByteArray;
I: Integer;
begin
DeviceList.Items.Clear;
DeviceList.Items.Add('suche...');
err := KMTCPRefreshDevices();
err := KMTCPGetNumDevices(num);
if num < 1 then
begin
DeviceList.Items.Clear;
DeviceList.Items.Add('kein Gerät gefunden');
end else
begin
SetLength(names, num);
SetLength(serials, num);
SetLength(ips, num);
SetLength(dips, num);
for I := 0 to num - 1 do
begin
names[I] := ' ';
serials[I] := ' ';
ips[I] := ' ';
end;
err := KMTCPGetDeviceInformation( names,
ips,
serials,
dips,
num);
deviceList.items.clear();
for I := 0 to num - 1 do
begin
deviceList.items.Add(names[I]+' | '+serials[I]+' | '+ips[I]+' | '+dips[I].ToString);
end;
end;
end;
Das mag Teilweise etwas komisch aussehen, habe ich mir aber aus diversen Foren und Dokus rausgesucht. Ich bekomm aber immer einen Fehler "Unbehandelte
Exception bei @($0,$0,$0).
Exception-Klasse System.NullReferenceException mit Meldung 'Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.'. Prozess AR6560.exe (1068)". Oder das Array ist leer (ich habe schon alles Mögliche probiert). Jetzt weiß ich nicht mehr weiter. Wichtig ist noch .Net! Also keine Pointer (oder habe ich das falsch verstanden!?).
Vielen Dank
Gerrit Götzen