Hallo zusammen,
habe folgendes Problem mit der
DLL Programmierung.
Ich möchte viele Sachen in seperate
DLL Dateien auslagern.
Es soll mir lediglich nur der Prozessorname ausgelesen werden.
Hier der Code der
Unit
Delphi-Quellcode:
unit GetCPUName;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Registry;
type
TForm1 =
class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
function GetProzessorName :
string;
external '
C:\***\DLL2\getcpunames.dll';
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text := GetProzessorName;
end;
end.
Hier nun der Code der
DLL
Delphi-Quellcode:
library GETCPUNAMES;
{ 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
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
Registry;
{$R *.res}
function GetProzessorName:
string;
var reg: TRegistry;
begin
result:='
Unbekannter Prozessor';
reg:=TRegistry.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('
Hardware\Description\System\CentralProcessor\0', false);
result:=reg.ReadString('
ProcessorNameString');
finally
reg.free;
end;
end;
exports
GetProzessorname;
begin
end.
Ich bekomme dabei die Fehlermeldung, dass eine "Ungültige Zeigeroperation" vorliegt.
Nach dem Abnicken der Fehlermeldung erhalte ich dann doch den Namen.
Wäre nur schön wenn die Fehlermeldung nicht erscheinen würde.
Es ist mit Sicherheit nur ein kleiner Fehler, aber zurzeit komme ich da nicht drauf und setze mal wieder auf eure gute Hilfe.
Gruß S4SH