Registriert seit: 13. Jul 2007
59 Beiträge
|
DLL mehrere Strings auslesen
15. Mär 2009, 17:54
Hallo zusammen,
habe mal wieder 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:
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.
Wie bekomme ich nun in meinem Programm alle Adapter in einer z.B. Combobox angezeigt?
Bisher nutze ich ComboBox1.Items.Add(getnetworkadapter);
und es wird mir nur ein beliebiger Adapter gezeigt.
|
|
Zitat
|