AGB  ·  Datenschutz  ·  Impressum  







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

Programmversion in DLL

Ein Thema von sko1 · begonnen am 28. Jun 2017 · letzter Beitrag vom 28. Jun 2017
Antwort Antwort
Seite 1 von 2  1 2      
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Programmversion in DLL

  Alt 28. Jun 2017, 11:01
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
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Programmversion in DLL

  Alt 28. Jun 2017, 11:03
Uns den Code für dein GetCurrentVersion() zu zeigen
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Programmversion in DLL

  Alt 28. Jun 2017, 11:13
Result := PChar(ver); Eine lokale Variable so zu verwenden ist ungünstig.
In deinem Fall wird die Adress nicht gleich überschrieben werden, aber eigentlich zeigt der Pointer nach Verlassen der Funktion auf einen ungültigen Speicherbereich.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.589 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Programmversion in DLL

  Alt 28. Jun 2017, 11:15
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:
https://stackoverflow.com/questions/...the-delphi-dll
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Programmversion in DLL

  Alt 28. Jun 2017, 11:17
Uns den Code für dein GetCurrentVersion() zu zeigen
wird selbstverständlich nachgeholt:

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
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Programmversion in DLL

  Alt 28. Jun 2017, 11:19
Result := PChar(ver); Eine lokale Variable so zu verwenden ist ungünstig.
In deinem Fall wird die Adress nicht gleich überschrieben werden, aber eigentlich zeigt der Pointer nach Verlassen der Funktion auf einen ungültigen Speicherbereich.
Ja das ist total falsch, niemals einen Speiecherbereich so in Dll's übergeben.
Besser:

Delphi-Quellcode:
function getDllVersion(Buffer : Pchar; bufsize : integer) : integer;
begin

// Hier den buffer mit maximal bufsize füllen
//strpcopy oder was auch immer

end;
hat den Vorteil das auch über das Result auf zu kleinen Buffer oder sonstige Problem hingewiesen werden kann
Fritz Westermann
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Programmversion in DLL

  Alt 28. Jun 2017, 11:21
ParamStr(0) liefert doch immer den Dateinamen deiner Exe!
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Programmversion in DLL

  Alt 28. Jun 2017, 11:23
ParamStr(0) liefert doch immer den Dateinamen deiner Exe!
stimmt, jetzt wo Du das schreibst wird es mir klar!
... und wie komm ich an die DLL von innerhalb der DLL heraus?

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: Programmversion in DLL

  Alt 28. Jun 2017, 11:25
Spontan würde ich es mit GetModuleFilename versuchen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Programmversion in DLL

  Alt 28. Jun 2017, 11:25
ParamStr(0) liefert doch immer den Dateinamen deiner Exe!
stimmt, jetzt wo Du das schreibst wird es mir klar!
... und wie komm ich an die DLL von innerhalb der DLL heraus?

Ciao
Stefan
So :

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 }
Fritz Westermann
  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 23:28 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