AGB  ·  Datenschutz  ·  Impressum  







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

32 zu 64Bit DLL

Ein Thema von EWeiss · begonnen am 1. Aug 2017 · letzter Beitrag vom 2. Aug 2017
Antwort Antwort
Seite 2 von 4     12 34      
EWeiss
(Gast)

n/a Beiträge
 
#11

AW: 32 zu 64Bit DLL

  Alt 1. Aug 2017, 20:50
Ahh das kann ich dir sogar erklären. Das Name-Mangling mit vorranstehendem _ (bzw. ohne bei cdecl ) und folgendem @n ist nur für die 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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

AW: 32 zu 64Bit DLL

  Alt 1. Aug 2017, 21:29
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

Geändert von EWeiss ( 1. Aug 2017 um 21:44 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: 32 zu 64Bit DLL

  Alt 2. Aug 2017, 01:54
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

Geändert von EWeiss (11. Jul 2019 um 16:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#14

AW: 32 zu 64Bit DLL

  Alt 2. Aug 2017, 04:52
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

Habe die resultierende .lib mal angehangen.
Angehängte Dateien
Dateityp: rar KVideoPlayer.rar (2,9 KB, 3x aufgerufen)
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 2. Aug 2017 um 04:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: 32 zu 64Bit DLL

  Alt 2. Aug 2017, 05:29
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

AW: 32 zu 64Bit DLL

  Alt 2. Aug 2017, 11:03
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

Geändert von EWeiss ( 2. Aug 2017 um 11:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: 32 zu 64Bit DLL

  Alt 2. Aug 2017, 11:41
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

AW: 32 zu 64Bit DLL

  Alt 2. Aug 2017, 11:45
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
  Mit Zitat antworten Zitat
Fritzew

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

AW: 32 zu 64Bit DLL

  Alt 2. Aug 2017, 11:58
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 @.....??
Fritz Westermann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

AW: 32 zu 64Bit DLL

  Alt 2. Aug 2017, 12:11
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

Geändert von EWeiss ( 2. Aug 2017 um 12:21 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 08:52 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