DLL mehrere Strings auslesen
Hallo zusammen,
habe mal wieder :wall: ein Problem mit meiner DLL Datei. Meine DLL soll mir die Netzwerkadapter auslesen. Das tut sie soweit auch. Nur das Problem ist, dass ich 4 Netzwerkadapter in meinem Rechner habe: W-LAN LAN Bluetooth FireWire Meine DLL sieht so aus:
Delphi-Quellcode:
Wie bekomme ich nun in meinem Programm alle Adapter in einer z.B. Combobox angezeigt?
library GetNetworkAdapters;
{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich in der ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt- Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL. Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String- Informationen als PChar- oder ShortString-Parameter übergeben. } uses sharemem, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Winsock, IpRtrMib, IpHlpApi, IpTypes, IpIfConst; {$R *.res} function GetNetworkAdapter: string; var MibRow: TMibIfRow; IntfTable: PMibIfTable; Size: DWORD; I: Integer; begin Size := 0; If GetIfTable(nil, Size, True) <> ERROR_INSUFFICIENT_BUFFER then Exit; IntfTable := AllocMem(Size); Try If GetIfTable(IntfTable, Size, True) = NO_ERROR then For I := 0 to IntfTable^.dwNumEntries -1 do begin {$R-} MibRow := IntfTable.Table[I]; result := (PChar(@MibRow.bDescr[0]) + ' @ ' + InttoStr(MibRow.dwSpeed div 1000000)+ ' MBit/s' ); {$R+} end; Finally FreeMem(IntfTable); end; end; exports GetNetworkAdapter; begin end. Bisher nutze ich
Delphi-Quellcode:
und es wird mir nur ein beliebiger Adapter gezeigt.
ComboBox1.Items.Add(getnetworkadapter);
|
Re: DLL mehrere Strings auslesen
Ein Array of String zurückgeben?
|
Re: DLL mehrere Strings auslesen
Und wie?
Versteh das gerade nicht so wirklich! |
Re: DLL mehrere Strings auslesen
Über eien Callback-Funktion.
|
Re: DLL mehrere Strings auslesen
Warum nicht einfach direkt ein Array of Strings zurückgeben?
|
Re: DLL mehrere Strings auslesen
Hallo
habe jetzt meine DLL auf die ganz einfache Weise mit dem Array of string erweitert.
Delphi-Quellcode:
Wie stelle ich es nun an, dass alle Adapter in einer Comobobox aufgelistet werden.
adapter[1] :=(PChar(@MibRow.bDescr[0]) + ' @ ' + InttoStr(MibRow.dwSpeed div 1000000)+ ' MBit/s');
adapter[2] :=(PChar(@MibRow.bDescr[1]) + ' @ ' + InttoStr(MibRow.dwSpeed div 1000000)+ ' MBit/s'); adapter[3] :=(PChar(@MibRow.bDescr[2]) + ' @ ' + InttoStr(MibRow.dwSpeed div 1000000)+ ' MBit/s'); adapter[4] :=(PChar(@MibRow.bDescr[3]) + ' @ ' + InttoStr(MibRow.dwSpeed div 1000000)+ ' MBit/s'); adapter[5] :=(PChar(@MibRow.bDescr[4]) + ' @ ' + InttoStr(MibRow.dwSpeed div 1000000)+ ' MBit/s'); sharemem habe ich da wo es stehen muss/soll eingetragen. Bei dem Befehl
Delphi-Quellcode:
erhalten ich wieder eine Fehlermeldung.
getnetworkadapter;
combobox1.Items.add(adapter[1]); Wo liegt denn der Fehler? |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage |
Re: DLL mehrere Strings auslesen
Was für eine Fehlermeldung erhälst du denn? :glaskugel:
|
Re: DLL mehrere Strings auslesen
Zugriffsverletzung bei Adresse 00455CC43 in Modul Project1.exe Lesen von Adresse 00000004
Wähle ich Adapter[5] kommt das selbe nur mit 00000014 |
Re: DLL mehrere Strings auslesen
Hast du jetzt einen dynamisches Array (Array of String) oder ein statisches Array (Array[1..5] of String)?
Bei ersterem solltest du dir erst den Speicher für das Array allokieren, das amchst du mit SetLength(array, länge); Jedoch ist dann der erste Index 0 und der letzte ist länge -1. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 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