![]() |
Programmversion in DLL
Hallo,
ich bin am Erstellen einer DLL, dabei ist mir aufgefallen, dass obwohl in den Projektoptionen / Versionsinfo z.B. 1.0.3.0 eingestellt ist (und der Haken bei DLL gesetzt). Innerhalb der DLL stelle ich dem Aufrufer die Version mit folgendem Code zur Verfügung:
Delphi-Quellcode:
function GetDLLVersion(): PChar; stdcall;
var ver: string; begin ver := 'Version : ' + GetCurrentVersion(); Result := PChar(ver); end; Was habe ich übersehen? Ciao Stefan |
AW: Programmversion in DLL
Uns den Code für dein
Delphi-Quellcode:
zu zeigen
GetCurrentVersion()
|
AW: Programmversion in DLL
Delphi-Quellcode:
Eine lokale Variable so zu verwenden ist ungünstig.
Result := PChar(ver);
In deinem Fall wird die Adress nicht gleich überschrieben werden, aber eigentlich zeigt der Pointer nach Verlassen der Funktion auf einen ungültigen Speicherbereich. |
AW: Programmversion in DLL
Ist ver leer oder kommt nichts in der Hostanwendung an?
Falls nichts ankommt, dürfte das daran liegen, dass du statt einen Puffer in der Hostanwendung zu reservieren und an die DLL zum Füllen zu übergeben einen Pointer auf eine Zeichenkette zurücklieferst. Es hat schon einen Grund, dass das niemand sonst so macht. ;-) Mehr zu dem Thema: ![]() |
AW: Programmversion in DLL
Zitat:
Delphi-Quellcode:
function GetCurrentVersion(): string;
var VerInfoSize: DWord; VerInfo: Pointer; VerValueSize: DWord; VerValue: PVSFixedFileInfo; Dummy: DWord; begin VerInfoSize := GetFileVersionInfoSize(PChar(ParamStr(0)), Dummy); GetMem(VerInfo, VerInfoSize); GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo); VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize); with VerValue^ do begin Result := IntTostr(dwFileVersionMS shr 16); Result := Result + '.' + IntTostr(dwFileVersionMS and $FFFF); Result := Result + '.' + IntTostr(dwFileVersionLS shr 16); Result := Result + '.' + IntTostr(dwFileVersionLS and $FFFF); end; FreeMem(VerInfo, VerInfoSize); end; Diesen Code nutze ich seit Jahren für die Versionsausgabe in Windows-Exe-Projekten Die Rückgabe aus der DLL ist "Version : 1.0.0.0" anstelle der erwarteten "1.0.3.0" die im Projekt eingestellt sind. Ciao Stefan |
AW: Programmversion in DLL
Zitat:
Besser:
Delphi-Quellcode:
hat den Vorteil das auch über das Result auf zu kleinen Buffer oder sonstige Problem hingewiesen werden kann
function getDllVersion(Buffer : Pchar; bufsize : integer) : integer;
begin // Hier den buffer mit maximal bufsize füllen //strpcopy oder was auch immer end; |
AW: Programmversion in DLL
ParamStr(0) liefert doch immer den Dateinamen deiner Exe!
|
AW: Programmversion in DLL
Zitat:
... und wie komm ich an die DLL von innerhalb der DLL heraus? Ciao Stefan |
AW: Programmversion in DLL
Spontan würde ich es mit
![]() |
AW: Programmversion in DLL
Zitat:
Delphi-Quellcode:
function getModuleName: string;
var FileName: array[0..MAX_PATH - 1] of Char; begin GetModuleFileName(HInstance, FileName, SizeOf(FileName)); Result := string(FileName); end; { DSiRealModuleName } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz