Delphi-PRAXiS
Seite 2 von 4     12 34      

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)

EWeiss 1. Aug 2017 20:50

AW: 32 zu 64Bit DLL
 
Zitat:

Zitat von Zacherl (Beitrag 1377863)
Ahh das kann ich dir sogar erklären. Das Name-Mangling mit vorranstehendem _ (bzw. ohne bei
Delphi-Quellcode:
cdecl
) und folgendem @n ist nur für die
Delphi-Quellcode:
stdcall
Calling-Convention. Unter 64-Bit werden allerdings sämtliche expliziten Calling-Conventions ignoriert und überall der 64-Bit vector-call verwendet (von Delphi-Seite aus).

Siehe dazu auch:
https://en.wikipedia.org/wiki/X86_ca...ing_convention
https://en.wikipedia.org/wiki/Name_mangling

Edit:
Aber wenn ich das richtig sehe, exportiert deine DLL ja scheinbar eh auch eine ungemanglete Version. Kannst du mal sowohl die aktuelle 64-Bit DLL (als Kompilat) als auch den C/C++ Header mit Testprojekt hochladen? Dann würde ich mal drüberschauen.

Danke für die Erklärung aber die LIB kann ich immer noch nicht erstellen. (Und wenn dann ist sie fehlerhaft)
Hmmm...
Zitat:

Warnung LNK4272 Bibliothekcomputertyp "X86" steht in Konflikt mit dem Zielcomputertyp "x64"
Wie bekomme ich eine 64BIT Lib erstellt... das wäre die frage.
Bin im Net am suchen wie blöde finde da nichts.


gruss

EWeiss 1. Aug 2017 21:29

AW: 32 zu 64Bit DLL
 
Das ist mein Problem!

Zitat:

lib /def:KVideoPlayer.def /out:KVideoPlayer.lib /machine:x64

Microsoft (R) Library Manager Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

LIB : warning LNK4012: Ungueltiger Wert "x64", muss "ALPHA, ARM, IX86, MIPS, MIPS16, MIPSR41XX, PPC, SH3, or SH4" sein; Option wir
LIB : warning LNK4068: /MACHINE nicht festgelegt; Standardwert IX86
Bibliothek KVideoPlayer.lib und Objekt KVideoPlayer.exp wird erstellt
Jetzt frage ich mich warum funktioniert denn "/machine:x64" bei anderen Leuten?
Kann doch irgendwo nicht sein.

Microsoft (R) COFF Binary File Dumper Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

dumpbin /exports KVideoPlayer.dll >KVideoPlayer.def
Code:
Dump of file KVideoPlayer.dll

File Type: DLL

  Summary

        CD28 .bss
       46340 .data
         E3A .didata
         567 .edata
        4B32 .idata
       2D5C4 .pdata
          44 .rdata
       2AB34 .reloc
        7600 .rsrc
      31DC84 .text
Das ist alles was ich bekomme von der 64BIT DLL.
Der gleiche Befehl bei 32BIT

Code:
Microsoft (R) COFF Binary File Dumper Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.


Dump of file KVideoPlayer.dll

File Type: DLL

  Section contains the following exports for KVideoPlayer.dll

           0 characteristics
           0 time date stamp Thu Jan 01 01:00:00 1970
        0.00 version
           1 ordinal base
          78 number of functions
          78 number of names

    ordinal hint RVA     name

         78    0 000E9F88 KVideo_CloseFile
         39    1 000E9F88 KVideo_CloseFile@0
         77    2 000EA510 KVideo_CreateOverlayBaseImage
         38    3 000EA510 KVideo_CreateOverlayBaseImage@24
         76    4 000EA36C KVideo_DisplayModeChanged
         37    5 000EA36C KVideo_DisplayModeChanged@0
         75    6 000EA6B8 KVideo_GetCapturedImage
         36    7 000EA6B8 KVideo_GetCapturedImage@4
         74    8 000E9D94 KVideo_GetLastError
         35    9 000E9D94 KVideo_GetLastError@0
         73    A 000EA0B0 KVideo_GetMediaInfoText
         34    B 000EA0B0 KVideo_GetMediaInfoText@0
         72    C 000EA20C KVideo_GetMediaProperty
         33    D 000EA20C KVideo_GetMediaProperty@4
         71    E 000EA3FC KVideo_GetPlayerState
         32    F 000EA3FC KVideo_GetPlayerState@0
         70   10 000E9FB8 KVideo_GetStreamInfo
         31   11 000E9FB8 KVideo_GetStreamInfo@108
         69   12 000EA414 KVideo_GetStreamPosition
         30   13 000EA414 KVideo_GetStreamPosition@0
         68   14 000E9CE8 KVideo_GetVersion
         29   15 000E9CE8 KVideo_GetVersion@0
         67   16 000EA2D4 KVideo_GetViewSize
         28   17 000EA2D4 KVideo_GetViewSize@8
         66   18 000E9E20 KVideo_GetWorkingVR
         27   19 000E9E20 KVideo_GetWorkingVR@0
         65   1A 000EA14C KVideo_GetXySubFilter
         26   1B 000EA14C KVideo_GetXySubFilter@4
         64   1C 000EA574 KVideo_HasOverlayImage
         25   1D 000EA574 KVideo_HasOverlayImage@0
         63   1E 000E9D14 KVideo_Initialize
         24   1F 000E9D14 KVideo_Initialize@8
         62   20 000EA304 KVideo_KeepAspectRatio
         23   21 000EA304 KVideo_KeepAspectRatio@4
         61   22 000EA078 KVideo_MediaInfoServiceReady
         22   23 000EA078 KVideo_MediaInfoServiceReady@0
         60   24 000E9E84 KVideo_OpenFile
         59   25 000E9EE4 KVideo_OpenFile2
         20   26 000E9EE4 KVideo_OpenFile2@8
         21   27 000E9E84 KVideo_OpenFile@4
         58   28 000EA3B4 KVideo_Pause
         19   29 000EA3B4 KVideo_Pause@0
         57   2A 000EA390 KVideo_Play
         18   2B 000EA390 KVideo_Play@0
         56   2C 000EA598 KVideo_PutOverlayImage
         17   2D 000EA598 KVideo_PutOverlayImage@24
         55   2E 000E9D58 KVideo_Release
         16   2F 000E9D58 KVideo_Release@0
         54   30 000EA348 KVideo_Repaint
         15   31 000EA348 KVideo_Repaint@0
         53   32 000EA324 KVideo_Resize
         14   33 000EA324 KVideo_Resize@0
         52   34 000EA04C KVideo_SelectAudioStream
         13   35 000EA04C KVideo_SelectAudioStream@4
         51   36 000EA020 KVideo_SelectVideoStream
         12   37 000EA020 KVideo_SelectVideoStream@4
         50   38 000E9E2C KVideo_SetLAVFiltersFolder
         11   39 000E9E2C KVideo_SetLAVFiltersFolder@4
         49   3A 000E9F68 KVideo_SetPlaybackRate
         10   3B 000E9F68 KVideo_SetPlaybackRate@4
         48   3C 000E9F48 KVideo_SetSearchMode
          9   3D 000E9F48 KVideo_SetSearchMode@4
         47   3E 000EA468 KVideo_SetStreamPosition
          8   3F 000EA468 KVideo_SetStreamPosition@8
         46   40 000E9E00 KVideo_SetVideoRenderer
          7   41 000E9E00 KVideo_SetVideoRenderer@4
         45   42 000EA4DC KVideo_SetVolume
          6   43 000EA4DC KVideo_SetVolume@4
         44   44 000EA090 KVideo_ShowMediaInfo
          5   45 000EA090 KVideo_ShowMediaInfo@0
         43   46 000EA1C0 KVideo_ShowXySubFilterPropertyPage
          4   47 000EA1C0 KVideo_ShowXySubFilterPropertyPage@4
         42   48 000EA3D8 KVideo_Stop
          3   49 000EA3D8 KVideo_Stop@0
         41   4A 000EA630 KVideo_UpdateOverlayImage
          2   4B 000EA630 KVideo_UpdateOverlayImage@4
         40   4C 000EA11C KVideo_XySubFilterState
          1   4D 000EA11C KVideo_XySubFilterState@8
tja was nun.

gruss

EWeiss 2. Aug 2017 01:54

AW: 32 zu 64Bit DLL
 
Zitat:

Edit:
Aber wenn ich das richtig sehe, exportiert deine DLL ja scheinbar eh auch eine ungemanglete Version. Kannst du mal sowohl die aktuelle 64-Bit DLL (als Kompilat) als auch den C/C++ Header mit Testprojekt hochladen? Dann würde ich mal drüberschauen.
Jo hier.
Es wird aber die MadVr benötigt damit ein Video läuft.
Aber zum kompilieren benötigt man die erst mal nicht.

Die KVideoPlayer.dll mit Unterstrich ist die in 64BIT.

Das Projekt läuft unter 32BIT. LIB in 32BIT ist dabei.
Eine 64BIT LIB habe ich noch nicht erstellen können warum auch immer das fehl schlägt.
Mein Delphi Projekt läuft ohne Probleme komplett in 64Bit inc. den ganzen Anhang (3rd Party DLL's).

Die Exports in Delphi sehen so aus.

Delphi-Quellcode:
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,

  KVideo_CloseFile                  name 'KVideo_CloseFile@0',
  KVideo_CreateOverlayBaseImage     name 'KVideo_CreateOverlayBaseImage@24',
  KVideo_DisplayModeChanged         name 'KVideo_DisplayModeChanged@0',
  KVideo_GetCapturedImage           name 'KVideo_GetCapturedImage@4',
  KVideo_GetLastError               name 'KVideo_GetLastError@0',
  KVideo_GetMediaInfoText           name 'KVideo_GetMediaInfoText@0',
  KVideo_GetMediaProperty           name 'KVideo_GetMediaProperty@4',
  KVideo_GetPlayerState             name 'KVideo_GetPlayerState@0',
  KVideo_GetStreamInfo              name 'KVideo_GetStreamInfo@108',
  KVideo_GetStreamPosition          name 'KVideo_GetStreamPosition@0',
  KVideo_GetVersion                 name 'KVideo_GetVersion@0',
  KVideo_GetViewSize                name 'KVideo_GetViewSize@8',
  KVideo_GetWorkingVR               name 'KVideo_GetWorkingVR@0',
  KVideo_GetXySubFilter             name 'KVideo_GetXySubFilter@4',
  KVideo_HasOverlayImage            name 'KVideo_HasOverlayImage@0',
  KVideo_Initialize                 name 'KVideo_Initialize@8',
  KVideo_KeepAspectRatio            name 'KVideo_KeepAspectRatio@4',
  KVideo_MediaInfoServiceReady      name 'KVideo_MediaInfoServiceReady@0',
  KVideo_OpenFile2                   name 'KVideo_OpenFile2@8',
  KVideo_OpenFile                   name 'KVideo_OpenFile@4',
  KVideo_Pause                      name 'KVideo_Pause@0',
  KVideo_Play                       name 'KVideo_Play@0',
  KVideo_PutOverlayImage            name 'KVideo_PutOverlayImage@24',
  KVideo_Release                    name 'KVideo_Release@0',
  KVideo_Repaint                    name 'KVideo_Repaint@0',
  KVideo_Resize                     name 'KVideo_Resize@0',
  KVideo_SelectAudioStream          name 'KVideo_SelectAudioStream@4',
  KVideo_SelectVideoStream          name 'KVideo_SelectVideoStream@4',
  KVideo_SetLAVFiltersFolder        name 'KVideo_SetLAVFiltersFolder@4',
  KVideo_SetPlaybackRate            name 'KVideo_SetPlaybackRate@4',
  KVideo_SetSearchMode              name 'KVideo_SetSearchMode@4',
  KVideo_SetStreamPosition          name 'KVideo_SetStreamPosition@8',
  KVideo_SetVideoRenderer           name 'KVideo_SetVideoRenderer@4',
  KVideo_SetVolume                  name 'KVideo_SetVolume@4',
  KVideo_ShowMediaInfo              name 'KVideo_ShowMediaInfo@0',
  KVideo_ShowXySubFilterPropertyPage name 'KVideo_ShowXySubFilterPropertyPage@4',
  KVideo_Stop                       name 'KVideo_Stop@0',
  KVideo_UpdateOverlayImage         name 'KVideo_UpdateOverlayImage@4',
  KVideo_XySubFilterState           name 'KVideo_XySubFilterState@8';
Zusätzlich nochmal die 64BIT unkomprimiert ansonsten kann man keine DEF erstellen. ;)

gruss

Zacherl 2. Aug 2017 04:52

AW: 32 zu 64Bit DLL
 
Liste der Anhänge anzeigen (Anzahl: 1)
Kein Plan, was du falsch machst, aber bei mir funktioniert es:
Code:
dumpbin /exports _KVideoPlayer.dll
Microsoft (R) COFF/PE Dumper Version 14.10.25019.0
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file _KVideoPlayer.dll

File Type: DLL

  Section contains the following exports for _KVideoPlayer.dll

    00000000 characteristics
           0 time date stamp
        0.00 version
           1 ordinal base
          81 number of functions
          81 number of names

    ordinal hint RVA     name

         81    0 0030AF20 KVideo_CloseFile
         42    1 0030AF20 KVideo_CloseFile@0
         80    2 0030B680 KVideo_CreateOverlayBaseImage
    ...
Damit habe ich dann die .def Datei erstellt (neues Textdokument mit EXPORTS in der ersten Zeile und darunter alle Symbole in jeweils einer eigenen Zeile aufgeführt) und schließlich:
Code:
lib /MACHINE:X64 /DEF:_KVideoPlayer.def
Microsoft (R) Library Manager Version 14.10.25019.0
Copyright (C) Microsoft Corporation. All rights reserved.

   Bibliothek "_KVideoPlayer.lib" und Objekt "_KVideoPlayer.exp" werden erstellt.
Könnte höchstens daran liegen, dass deine VS Toolchain noch aus Vorkriegszeiten stammt :mrgreen:

Habe die resultierende .lib mal angehangen.

jaenicke 2. Aug 2017 05:29

AW: 32 zu 64Bit DLL
 
Zitat:

Zitat von EWeiss (Beitrag 1377865)
Microsoft (R) Library Manager Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

Wenn ich mich recht entsinne, wurde 64-Bit Unterstützung erst mit VC++ 2005 eingeführt. VC++ 6.0, aus dem dieses Tool stammt, hatte sie jedenfalls definitiv nicht.

EWeiss 2. Aug 2017 11:03

AW: 32 zu 64Bit DLL
 
Zitat:

Könnte höchstens daran liegen, dass deine VS Toolchain noch aus Vorkriegszeiten stammt
Ich habe VS2017 kann mir nicht denken das dass aus der Vorzeit stammt.

Ich kann jedoch nicht garantieren das die LIB.EXE die von VS2017 ist. (Eventuell wird die von VC (Aus Visual Studio 6 verwendet)
Seltsam ist ja schon das meine Exports gar nicht mit dem Flag lib /MACHINE:X64 akzeptiert wird.

Wirklich konfus.
Danke für den Upload.

Zitat:

VC++ 6.0, aus dem dieses Tool stammt, hatte sie jedenfalls definitiv nicht.
Arghh.. ja das hätte ich auch sehen müssen.
Muss mal sehen wie ich den Pfad zur LIB ändern kann.

EDIT:
Dein Archiv scheint beschädigt zu sein.

gruss

jaenicke 2. Aug 2017 11:41

AW: 32 zu 64Bit DLL
 
Zitat:

Zitat von EWeiss (Beitrag 1377889)
Ich kann jedoch nicht garantieren das die LIB.EXE die von VS2017 ist. (Eventuell wird die von VC (Aus Visual Studio 6 verwendet)

Das kann man in aktuellen Windowsversionen leicht prüfen. Einfach auf der Kommandozeile eingeben:
where lib.exe
Dann wird dir angezeigt wo die gefunden wird.

EWeiss 2. Aug 2017 11:45

AW: 32 zu 64Bit DLL
 
Zitat:

Zitat von jaenicke (Beitrag 1377893)
Zitat:

Zitat von EWeiss (Beitrag 1377889)
Ich kann jedoch nicht garantieren das die LIB.EXE die von VS2017 ist. (Eventuell wird die von VC (Aus Visual Studio 6 verwendet)

Das kann man in aktuellen Windowsversionen leicht prüfen. Einfach auf der Kommandozeile eingeben:
where lib.exe
Dann wird dir angezeigt wo die gefunden wird.

Wie kann ich denn die Umgebungsvariable von 2017 einstellen ?

gruss

Fritzew 2. Aug 2017 11:58

AW: 32 zu 64Bit DLL
 
Bei mir ist das:
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"

Code:
 KVideo_CloseFile name 'KVideo_CloseFile@0',
  KVideo_CreateOverlayBaseImage name 'KVideo_CreateOverlayBaseImage@24',
  KVideo_DisplayModeChanged name 'KVideo_DisplayModeChanged@0',
  KVideo_GetCapturedImage name 'KVideo_GetCapturedImage@4',
Wieso exportierts Du die function 2 mal? und weshalb mit den @.....??

EWeiss 2. Aug 2017 12:11

AW: 32 zu 64Bit DLL
 
Zitat:

Zitat von Fritzew (Beitrag 1377897)
Bei mir ist das:
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"

Code:
 KVideo_CloseFile name 'KVideo_CloseFile@0',
  KVideo_CreateOverlayBaseImage name 'KVideo_CreateOverlayBaseImage@24',
  KVideo_DisplayModeChanged name 'KVideo_DisplayModeChanged@0',
  KVideo_GetCapturedImage name 'KVideo_GetCapturedImage@4',
Wieso exportierts Du die function 2 mal? und weshalb mit den @.....??

Habe das so gelernt ;) und auch mit meiner Bass_Vis.dll gemacht irgendwo gab es da mal Fehler und das hat diese behoben.
Warum auch immer.
Das "@....." sind die Bytes der jeweiligen Datentypen die in der exportierten Funktion enthalten sind.
Bei 64Bit wie Zacherl sagt werden diese ignoriert.

Siehe die Funktionen im C-Header.
Wenn man das jedoch anders oder besser machen kann lerne ich gern dazu.

Habe die Bat ausgeführt wird aber weiterhin die 6 Version von LIB\DUMPBI verwendet

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:49 Uhr.
Seite 2 von 4     12 34      

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