AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL mehrere Strings auslesen

Ein Thema von S4SH1981 · begonnen am 15. Mär 2009 · letzter Beitrag vom 25. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
S4SH1981

Registriert seit: 13. Jul 2007
59 Beiträge
 
#1

DLL mehrere Strings auslesen

  Alt 15. Mär 2009, 16: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.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: DLL mehrere Strings auslesen

  Alt 15. Mär 2009, 16:58
Ein Array of String zurückgeben?
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
S4SH1981

Registriert seit: 13. Jul 2007
59 Beiträge
 
#3

Re: DLL mehrere Strings auslesen

  Alt 15. Mär 2009, 17:33
Und wie?

Versteh das gerade nicht so wirklich!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: DLL mehrere Strings auslesen

  Alt 15. Mär 2009, 19:30
Über eien Callback-Funktion.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: DLL mehrere Strings auslesen

  Alt 15. Mär 2009, 19:35
Warum nicht einfach direkt ein Array of Strings zurückgeben?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
S4SH1981

Registriert seit: 13. Jul 2007
59 Beiträge
 
#6

Re: DLL mehrere Strings auslesen

  Alt 19. Mär 2009, 14:34
Hallo

habe jetzt meine DLL auf die ganz einfache Weise mit dem Array of string erweitert.
Delphi-Quellcode:
          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');
Wie stelle ich es nun an, dass alle Adapter in einer Comobobox aufgelistet werden.

sharemem habe ich da wo es stehen muss/soll eingetragen.

Bei dem Befehl
Delphi-Quellcode:
getnetworkadapter;
combobox1.Items.add(adapter[1]);
erhalten ich wieder eine Fehlermeldung.

Wo liegt denn der Fehler?
  Mit Zitat antworten Zitat
19. Mär 2009, 15:11
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: DLL mehrere Strings auslesen

  Alt 19. Mär 2009, 15:13
Was für eine Fehlermeldung erhälst du denn?
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
S4SH1981

Registriert seit: 13. Jul 2007
59 Beiträge
 
#9

Re: DLL mehrere Strings auslesen

  Alt 19. Mär 2009, 15:15
Zugriffsverletzung bei Adresse 00455CC43 in Modul Project1.exe Lesen von Adresse 00000004
Wähle ich Adapter[5] kommt das selbe nur mit 00000014
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: DLL mehrere Strings auslesen

  Alt 19. Mär 2009, 15:21
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.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:56 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