Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi 32 zu 64Bit DLL (https://www.delphipraxis.net/193447-32-zu-64bit-dll.html)

Fritzew 2. Aug 2017 12:20

AW: 32 zu 64Bit DLL
 
als *.cmd speichern
Code:
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"
del *.lib
del *.exp
lib.exe /DEF:KVideoPlayer.def /MACHINE:X64 /OUT:KVideoPlayer_x64.lib
lib.exe /DEF:KVideoPlayer.def /MACHINE:X86 /OUT:KVideoPlayer_x86.lib
pause
Und jetzt noch die def:
Code:
LIBRARY    KVideoPlayer.DLL

EXPORTS
  KVideo_CloseFile
  KVideo_CreateOverlayBaseImage
  KVideo_DisplayModeChanged
  KVideo_GetCapturedImage
  KVideo_GetLastError
  KVideo_GetMediaInfoText
  KVideo_GetMediaProperty
  KVideo_GetPlayerState
  KVideo_GetStreamInfo
  KVideo_GetStreamPosition
  KVideo_GetVersion
  KVideo_GetViewSize
  KVideo_GetWorkingVR
  KVideo_GetXySubFilter
  KVideo_HasOverlayImage
  KVideo_Initialize
  KVideo_KeepAspectRatio
  KVideo_MediaInfoServiceReady
  KVideo_OpenFile2
  KVideo_OpenFile
  KVideo_Pause
  KVideo_Play
  KVideo_PutOverlayImage
  KVideo_Release
  KVideo_Repaint
  KVideo_Resize
  KVideo_SelectAudioStream
  KVideo_SelectVideoStream
  KVideo_SetLAVFiltersFolder
  KVideo_SetPlaybackRate
  KVideo_SetSearchMode
  KVideo_SetStreamPosition
  KVideo_SetVideoRenderer
  KVideo_SetVolume
  KVideo_ShowMediaInfo
  KVideo_ShowXySubFilterPropertyPage
  KVideo_Stop
  KVideo_UpdateOverlayImage
  KVideo_XySubFilterState
Mit der erzeugten lib kompiliert VS problemlos

Deine zusätzlichen Exporte kannst Du aus der Dll rauswerfen. Die brauchst Du nicht.

EWeiss 2. Aug 2017 12:22

AW: 32 zu 64Bit DLL
 
Zitat:

Deine zusätzlichen Exporte kannst Du aus der Dll rauswerfen. Die brauchst Du nicht.
Dann möchte ich aber gerne auch wissen warum nicht.

Siehe.
Zitat:

Das "@....." sind die Bytes der jeweiligen Datentypen die in der exportierten Funktion enthalten sind.
Bei 64Bit wie Zacherl sagt werden diese ignoriert.
Zitat:

Mit der erzeugten lib kompiliert VS problemlos
Ja bei dir aber bei mir wird immer noch LIB.exe von VS 6.0 verwendet daher geht es nicht.

gruss

Fritzew 2. Aug 2017 12:32

AW: 32 zu 64Bit DLL
 
Die werden von importierten C++ Funktionen benötigt.
da aber die Funktionen in Deinem Header als extern "C" deklariert sind werden diese nicht benötigt.
Das ganze nennt sich name mangling und ist c++ speziell
C++ <> C, und Delphi exportiert die Funktionen analog zu C

Immer wenn Der C++ Linker anmeckert das er irgend eine function name@xxx nicht findet fehlt ein extern "C"

jaenicke 2. Aug 2017 12:45

AW: 32 zu 64Bit DLL
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von EWeiss (Beitrag 1377904)
Ja bei dir aber bei mir wird immer noch LIB.exe von VS 6.0 verwendet daher geht es nicht.

Das musst du im Systempfad einstellen. Dafür drückst du die Windows-Taste und gibst ein path oder umgebung, dann sollte das so ca. aussehen:
Anhang 47705
Je nach Betriebssystem sollte es trotzdem so ähnlich aussehen.

In dem letzten Fenster schiebst du dann den Pfad zu VC++ 6.0 nach unten hinter den der neuen Version oder löschst den von VC++ 6.0 ganz.

EWeiss 2. Aug 2017 12:45

AW: 32 zu 64Bit DLL
 
Zitat:

Zitat von Fritzew (Beitrag 1377905)
Die werden von importierten C++ Funktionen benötigt.
da aber die Funktionen in Deinem Header als extern "C" deklariert sind werden diese nicht benötigt.
Das ganze nennt sich name mangling und ist c++ speziell
C++ <> C, und Delphi exportiert die Funktionen analog zu C

Immer wenn Der C++ Linker anmeckert das er irgend eine function name@xxx nicht findet fehlt ein extern "C"

Ahh Danke ;)

Ich habe sie mal Auskommentiert.
Mit deiner *.cmd etwas angepasst..

Code:
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"
 del *.lib
 del *.exp
 dumpbin /exports KVideoPlayer.dll >KVideoPlayer.def
 lib.exe /DEF:KVideoPlayer.def /MACHINE:X64 /OUT:KVideoPlayer_x64.lib
 lib.exe /DEF:KVideoPlayer.def /MACHINE:X86 /OUT:KVideoPlayer_x86.lib
 pause
Zitat:

KVideoPlayer.def : warning LNK4017: CD00-Anweisung wird von der Zielplattform nicht unterstuetzt; ignoriert
So 15 an der Zahl.

Die *.DEF scheint OK.
Die LIB nicht die ist gerade mal 2 KB groß und VC meldet 13 Verweise nicht aufgelöst.

Frustrierende das ganze ;)

gruss

Fritzew 2. Aug 2017 12:49

AW: 32 zu 64Bit DLL
 
Emil hör doch auf die def immer automatisch erzeugen zu wollen.
Benutze die def die ich da oben angehängt hatte.
Im Prinzip ist der Inhalt der *.def Datei einfach deine Exportsliste aus deinem Delphi Projekt.
Einfach ohne Kommas :-)

EWeiss 2. Aug 2017 12:54

AW: 32 zu 64Bit DLL
 
Zitat:

Zitat von Fritzew (Beitrag 1377908)
Emil hör doch auf die def immer automatisch erzeugen zu wollen.
Benutze die def die ich da oben angehängt hatte.
Im Prinzip ist der Inhalt der *.def Datei einfach deine Exportsliste aus deinem Delphi Projekt.
Einfach ohne Kommas :-)

Ja sorry so hatte ich es vorher ja auch gemacht ;)
Werde es nochmal versuchen.

Danke!

EDIT:
Jetzt funktioniert das ganze. :)
Dafür jetzt 3 ganze Seiten resultierend daraus weil mein Pfad zur LIB/DUMPBIN auf VS 6.0 gezeigt hat.
Danke nochmal an alle die mitgeholfen haben.

gruss

EWeiss 2. Aug 2017 15:48

AW: 32 zu 64Bit DLL
 
Ich hab jetzt soviel Arbeit mit der LIB gehabt aber vielleicht ist das doch der bessere weg.

gruss

Fritzew 2. Aug 2017 16:58

AW: 32 zu 64Bit DLL
 
Zitat:

Ich hab jetzt soviel Arbeit mit der LIB gehabt aber vielleicht ist das doch der bessere weg.
Ok Du hast das jetzt auf dynamisches laden umgebaut.....

Ich verstehe echt nicht was Du erreichen willst. Welches Problem soll denn gelöst werden?

EWeiss 2. Aug 2017 17:05

AW: 32 zu 64Bit DLL
 
Zitat:

Zitat von Fritzew (Beitrag 1377947)
Zitat:

Ich hab jetzt soviel Arbeit mit der LIB gehabt aber vielleicht ist das doch der bessere weg.
Ok Du hast das jetzt auf dynamisches laden umgebaut.....

Ich verstehe echt nicht was Du erreichen willst. Welches Problem soll denn gelöst werden?

Es gibt jetzt kein Problem mehr..
Werde vielleicht das C++ Sample noch etwas ausbauen damit es so aussieht wie in Delphi um alle Funktionen testen zu können.
Nur mit dem statischen laden ist man unabhängig von irgendwelchen Librarys

Zudem muss man dann nicht die Lib's hin und her verschieben. (etwas unabhängiger halt) :)
bzw. mehrere Builds erstellen.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 Uhr.
Seite 3 von 4     123 4      

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