Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 11, 2025 08:37

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: DLL Functionsproblem
BeitragVerfasst: Di Sep 23, 2003 17:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
Hey Leute,,,

ich habe in einer DLL eine Function die den Versionswert giVersion exportieren soll :

---> Der Code aus der DLL :
Code:
  1. // Function zum abrufen der Versionsnummer
  2. function getVersion(giVersion : Integer): Integer;
  3. begin
  4.     giVersion := 1001;
  5.     result := giVersion;
  6. end;
  7.  
  8. // Hier die Exporte
  9. exports
  10. getVersion;


---> Der Code aus der Test Anwendung :
Code:
  1. // Extern Versionsdaten aus der SM3DOGL.DLL
  2. function getVersion(giVersion : Integer): Integer; stdcall;external 'SM3DOGL.DLL';
  3.  
  4. // Daten beim Klick abrufen und eintragen
  5. procedure TForm1.Button1Click(Sender: TObject);
  6. begin
  7. gsVersion :=IntToStr(getVersion(giVersion));
  8. Label3.Caption := gsVersion;
  9. end;


Wenn ich jetzt auf dem Button klicke stürtzt die Anwendung ab, im Debug Modus hat die Variable aber den Wert aus der DLL erhalten. Was mache ich falsch ?

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 23, 2003 17:26 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
du hast in deiner dll kein stdcall angegeben, aber in einer import unit? warum, dafür gibts keinen grund... entweder in beiden units, um mit anderen programmiersprachen arbeiten zu können, oder in keinen... aber abwechselnd? das muss irgendwo krachen. das würd ich erstmal überprüfen, wenns dann immernoch nicht geht, sag bescheid


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 23, 2003 17:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
Stimmt Du hast recht, danke ich ändere das mal ganz fix. Danke.

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 23, 2003 17:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
JO danke, sowas das ich das übersehen habe... ! Jetzt klappt es . :D

ps.: Hast Du noch ne Idee wie ich die Versionsnummer im Format :

1.0.0.1 abspeichern kann ? Kriege das nicht hin.

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 23, 2003 18:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Nimm doch einen stink normalen String. So wie es auch bei OpenGL oder ähnlichen Dingen gemacht ist.
Andernfalls empfielt es sich den in 4 Interger (Byte) Werte aufdröseln. Aber da ist String tausend mal besser.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 23, 2003 19:32 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 22, 2003 19:56
Beiträge: 104
Wohnort: Lübeck, Germany
Habe eine Möglichkeit gefunden, zwar auch noch nicht das Non+, aber schon einmal gut. Langsam kommt die Delphi Materie wieder *g*.

Hier der Code :

---> Function zum auslesen
Code:
  1. // Datei Version auslesen
  2. function GetBuildInfo(const AFilename:String; var V1,V2,V3,V4:Word):Boolean;
  3. var
  4.    VerInfoSize  : Integer;
  5.    VerValueSize : DWord;
  6.    Dummy        : DWord;
  7.    VerInfo      : Pointer;
  8.    VerValue     : PVSFixedFileInfo;
  9. begin
  10.   VerInfoSize:=GetFileVersionInfoSize(PChar(AFilename),Dummy);
  11.   Result:=False;
  12.   if VerInfoSize<>0 then begin
  13.     GetMem(VerInfo,VerInfoSize);
  14.     try
  15.       if GetFileVersionInfo(PChar(AFilename),0,VerInfoSize,VerInfo) then begin
  16.         if VerQueryValue(VerInfo,'',Pointer(VerValue),VerValueSize) then
  17.          with VerValue^ do begin
  18.           V1:=dwFileVersionMS shr 16;
  19.           V2:=dwFileVersionMS and $FFFF;
  20.           V3:=dwFileVersionLS shr 16;
  21.           V4:=dwFileVersionLS and $FFFF;
  22.         end;
  23.         Result:=True;
  24.       end;
  25.     finally
  26.       FreeMem(VerInfo,VerInfoSize);
  27.     end;
  28.   end;
  29. end;


---> Dann auf dem Formular ein Label und ein Button und folgender Code
Code:
  1. // Dateiversion auslesen und in label5 eintragen
  2. // Jeweils die 4 Werte (Word) der Versionsnummer und jeweils einen Punkt
  3. // dazu setzen
  4. procedure TForm1.Button3Click(Sender: TObject);
  5. //Variablen
  6. var
  7. V1,V2,V3,V4 : Word; // Hauptversion, Nebenversion, Ausgabe, Compilierung
  8.  
  9. begin
  10. GetBuildInfo('SM3DOGL.DLL', V1, V2, V3, V4);
  11. label5.Caption:=IntToStr(V1) + '.' + IntToStr(V2) + '.' + IntToStr(V3) +
  12. '.' + IntToStr(V4);
  13.  
  14. end;

_________________
Gruß Sascha
[SM3D Game Development]


WERBUNG für ein gutes Projekt
Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 18 Queries | GZIP : On ]