AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Prism Ein Array von Char-Pointern einer DLL übergeben (.net)
Thema durchsuchen
Ansicht
Themen-Optionen

Ein Array von Char-Pointern einer DLL übergeben (.net)

Offene Frage von "ggoetzen"
Ein Thema von ggoetzen · begonnen am 2. Jul 2007
Antwort Antwort
ggoetzen

Registriert seit: 2. Jul 2007
1 Beiträge
 
#1

Ein Array von Char-Pointern einer DLL übergeben (.net)

  Alt 2. Jul 2007, 11:57
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz