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 1 von 4  1 23     Letzte »    
EWeiss
(Gast)

n/a Beiträge
 
#1

32 zu 64Bit DLL

  Alt 1. Aug 2017, 17:57
War bei einem Kumpel und habe da meine DLL von 32BIT nach 64BIT kompiliert.
DLL wird erstellt.


Wenn ich jetzt eine *.LIB daraus generieren will kommt folgende Meldung!
implib.exe /s KVideoPlayer.lib KVideoPlayer.dll
Zitat:
Error(9): Corrupt NT DLL (too short for export table)
auch mit
dumpbin /exports KVideoPlayer.dll >KVideoPlayer.def

Bekomme ich quasi eine leere DEF.

Öffne ich die DLL mit Dependency Walker meldet er mir.
Zitat:
Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
Error: Modules with different CPU types were found.
IN VC kann ich damit nichts anfangen da mir die *.lib für 64BIT fehlt.
Was kann ich tun?


gruss
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#2

AW: 32 zu 64Bit DLL

  Alt 1. Aug 2017, 18:16
das mit den DLLs ist bei mir zwar schon lange her, aber ich hatte glaube ich immer (automatisch) zuerst per impdef eine "*.def" erzeugt und darauf dann per implib eine LIB.

Am besten hat das damals glaube ich immer mit den "implib" und "impdef" geklappt, welche beim RadStudio für/von C++Builder mit dabei waren.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: 32 zu 64Bit DLL

  Alt 1. Aug 2017, 18:28
das mit den DLLs ist bei mir zwar schon lange her, aber ich hatte glaube ich immer (automatisch) zuerst per impdef eine "*.def" erzeugt und darauf dann per implib eine LIB.

Am besten hat das damals glaube ich immer mit den "implib" und "impdef" geklappt, welche beim RadStudio für/von C++Builder mit dabei waren.
NA ja das hilft mir leider nicht denn dieser Fehler ist schon seltsam.
Zitat:
Error(9): Corrupt NT DLL (too short for export table)
am Anfang der Library (DLL) steht irgend ein _fastCall Wrapper.
Eventuell kommt implib damit nicht zurecht.
Denn die DLL ist 3,5 MB groß (ja das leidige Problem mit den Dateigrößen um das zweifache gestiegen)
vorher 1,1 jetzt 3,5

gruss

Geändert von EWeiss (11. Jul 2019 um 16:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

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

AW: 32 zu 64Bit DLL

  Alt 1. Aug 2017, 18:54
Ich rate mal... fehlt bei dir vielleicht die passende C++ Runtime für 64 Bit?
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
 
#5

AW: 32 zu 64Bit DLL

  Alt 1. Aug 2017, 19:02
Ich rate mal... fehlt bei dir vielleicht die passende C++ Runtime für 64 Bit?
Keine Ahnung ist nicht mein Berlin.. muss mich da mal informieren.

Ich habe es jetzt mal mit MKEXP.EXE versucht.
VS meldet mir dann das die LIB Fehlerhaft sei.

Die DLL wird ohne Fehler compiliert\erstellt.
Kann mir jetzt nicht vorstellen das irgendetwas fehlt.

Mit was kann ich eine 64BIT DEF und 64BIT Lib erstellen ?
Poah... Delphi immer mit seinen extra einheiten.

gruss

Geändert von EWeiss ( 1. Aug 2017 um 19:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: 32 zu 64Bit DLL

  Alt 1. Aug 2017, 20:07
Zitat:
Error: Modules with different CPU types were found.
Das deutet für mich darauf hin, dass hier irgendwo ein Konflikt zwischen 32 und 64-Bit vorliegt. Also irgendeins der Tools (oder sogar MSVC) davon ausgeht, dass es mit einer 32-Bit DLL arbeitet, du aber die 64-Bit DLL reinfütterst (oder umgekehrt). Vielleicht brauchst du da irgendwo einen Commandline-Switch, um die CPU Architektur zu übergeben oder sowas in der Art.

Edit: Okay das lag wohl daran, dass IMPLIB.EXE tatsächlich nur für 32-Bit ist. MKEXP.EXE ist laut meiner Recherche auf jeden Fall die richtige Wahl. Gibt dir der VS Linker evtl. einen Error-Code?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 1. Aug 2017 um 20:12 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: 32 zu 64Bit DLL

  Alt 1. Aug 2017, 20:14
Zitat:
Error: Modules with different CPU types were found.
Das deutet für mich darauf hin, dass hier irgendwo ein Konflikt zwischen 32 und 64-Bit vorliegt. Also irgendeins der Tools (oder sogar MSVC) davon ausgeht, dass es mit einer 32-Bit DLL arbeitet, du aber die 64-Bit DLL reinfütterst (oder umgekehrt). Vielleicht brauchst du da irgendwo einen Commandline-Switch, um die CPU Architektur zu übergeben oder sowas in der Art.

Edit: Okay das lag wohl daran, dass IMPLIB.EXE tatsächlich nur für 32-Bit ist. MKEXP.EXE ist laut meiner Recherche auf jeden Fall die richtige Wahl. Gibt dir der VS Linker evtl. einen Error-Code?
Kann ich aber nicht verstehen.
Entweder Tokyo kann 64Bit DLL's erstellen oder nicht.
Nur dann sollten sie auch von anderen Sprachen erkannt werden.

Wenn jemand Bock hat meinen Source selbst mal als 64BIT zu kompilieren bescheid sagen schicke den dann über MAIL.
Bei mir will das irgendwo nicht obwohl die DLL ohne murren erstellt wird.

EDIT:
Zitat:
Gibt dir der VS Linker evtl. einen Error-Code?
Ja korrupte LIB

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: 32 zu 64Bit DLL

  Alt 1. Aug 2017, 21:16
Ich denke nicht, dass es am Kompilat liegt. Das PE Format ist eindeutig definiert und die Export Table - aus der die .lib bzw. .def generiert wird - auch. Ich vermute eher, dass mit der .lib alles ok ist, aber du in Visual Studio falsche Einstellungen gewählt hast.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: 32 zu 64Bit DLL

  Alt 1. Aug 2017, 21:26
Ich denke nicht, dass es am Kompilat liegt. Das PE Format ist eindeutig definiert und die Export Table - aus der die .lib bzw. .def generiert wird - auch. Ich vermute eher, dass mit der .lib alles ok ist, aber du in Visual Studio falsche Einstellungen gewählt hast.
Ich habe dort nichts geändert.
Wenn ich die 32BIT lib mit impLib.exe oder mkexp.exe erstelle dann ist dies in beiden fällen korrupt.
Deshalb geht auch die 64BitLib nicht.

Die 32Bit Library funktioniert einwandfrei.

Die 64Bit nicht.

Mit
LIB /DEF:KVideoPlayer.DEF funktioniert das erstellen einer 64Bit Lib nicht.
Bei 32Bit einwandfrei.

Zitat:
Fehler LNK2019 Verweis auf nicht aufgelöstes externes Symbol "KVideo_GetMediaProperty" in Funktion ""int __cdecl InitInstance(struct HINSTANCE__ *,int)" (?InitInstance@@YAHPEAUHINSTANCE__@@H@Z)". KVPlayer
Es wird dann der falsche Verweis gelesen.
Zitat:
Fehler LNK2019 Verweis auf nicht aufgelöstes externes Symbol "_KVideo_Initialize@8" in Funktion ""int __cdecl InitInstance(struct HINSTANCE__ *,int)" (?InitInstance@@YAHPAUHINSTANCE__@@H@Z)".
Es fehlt die Anzahl der Bytes beim Symbol so wie als Beispiel hier _KVideo_Initialize@8 die @8.

gruss

Geändert von EWeiss ( 2. Aug 2017 um 02:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: 32 zu 64Bit DLL

  Alt 1. Aug 2017, 21:44
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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 1. Aug 2017 um 21:49 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 21:12 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