regsv32 kann nich registrieren
-
Wir haben unser Project von X86 auf X64 migriert ( Visula Studin 2015 ) Jetzt kann ich meine NmsCmComon.dll nicht mehr mit regsv32:«C:\WINDOWS\System32\regsvr32.exe /C NmsCmCommon.dll» ( sicherstellen dass die 64 Bit Verion genommen wird bekp,,e ich den Fehlere:
The modules NmsCmCommon.dll is loaded but the entry-point DLLRegistryServer was not found.
Make sure that NmsCmCommn.dll is a valid DLL or OCX File and the try again.Obwohl sich eigentlich nichts geändert hat
-
@TAK_1969 sagte in regsv32 kann nich registrieren:
C:\WINDOWS\System32\regsvr32.exe /C NmsCmCommon.dll
Sorry, aber wo hast Du
/C
her und was soll das bewirken? regsvr32. Sonst auch: How to use the Regsvr32 tool and troubleshoot Regsvr32 error messages.Versuch mal
/C
wegzulassen und einen absoluten Pfad zur DLL anzugeben.Aber irgendwie riecht mir
@TAK_1969 sagte in regsv32 kann nich registrieren:
The modules NmsCmCommon.dll is loaded but the entry-point DLLRegistryServer was not found.
nach etwas anderem.
-
Danke für den Tipp aber das weglassen des /C aber das swie der absulute Pfad brachten keine Verbesserung. Grundsätlich ist die Fehlermeldung ja klar. Die Funktion DLLRegistryServer fehlt oder ist nichr exportiert worde aberwarum geschieht die mit der Umstellung von X86 auf X64 das verstehe ich nicht?
-
Was sagt
dumpbin
? IstDllRegisterServer()
wirklich exportiert? Exportierst Du vielleicht per .def-File und hast vergessen es auch für die x64-Configuration in den Linkereinstellungen anzugeben?
-
@Swordfish sagte in regsv32 kann nich registrieren:
NmsCmCommon.dll
Die Frage ist: Warum willst Du das tun?
Du stellst vermutlich eine x-y Frage...Das riecht förmlich danach, dass es kein COM Modul ist.
Kann es sein, dass Du REGASM benutzen musst, weil es ein .NET Modul ist,Woher ist das Modul? Frage den Hersteller.
-
@Martin-Richter Du hast den falschen zitiert.
@TAK_1969 Gaaaah, bist du das, Herr Kocher? can not register NmsCmCommon.dll using regsvr32? Wennn schon crossposten dann wenigstens darauf aufmerksam machen. *kopfschüttel*
-
Ok der Link auf den anderen Post wäre sinvoll gewesen. Das Problem ist das die Funktion DllRegisterServer() nicht mehr exportioert wird siehe meine früher Frage
welche ich so wie es Aussieht falsch gelöst habe.
-
Wenn dieser Entry-Point nicht exportiert wird, dann stellt diese DLL auch keine COM Objekte zur Verfügung...
Es kann immer noch ein .NET Modul sein.
-
DotNet ist es definitv nicht aber das Problem ist das es seit der Migration auf X64 keine Com Objekte mehr hat wenn ich diese wieder mit
ragma comment(linker,"/EXPORT:DllCanUnloadNow=_DllCanUnloadNow@0,PRIVATE")
pragma comment(linker,/EXPORT:DllGetClassObject=_DllGetClassObject@12,PRIVATE")
pragma comment(linker, "/EXPORT:DllRegisterServer=_DllRegisterServer@0,PRIVATE")
pragma omment(linker,"/EXPORT:DllUnregisterServer=_DllUnregisterServer@0,PRIVATE")exportiren will habe ich unresolved external Symbols dieser Funktionen Dies aber erst seit der umstallung auf X64 .
-
Und wo ist der Code für diese Funktionen?
In welchem .cpp Modul?
-
Ich tippe darauf, daß das "name mangling" für x64 unterschiedlich zu x86 ist, s. z.B. 64bit name mangling for c++.
-
Ich würde eher darauf tippen dass @12 bei einer Funktion die drei pointer-sized Parameter hat (wie eben DllGetClassObject) bei 32 Bit wunderbar passt (32/8*3=12), bei 64 Bit aber eher nicht so.
Probier's mal mit_DllGetClassObject@24
für den 64 Bit Build.Oder mach die Funktionen gleichEDIT: Nö, falsch gedacht, dabei entstehend wohl trotzdem diese komischen Namen. Hmpf. Egal, das @24 sollte passen.extern "C" __declspec(dllexport)
, dann kannst du dir die ganzen pragma comment linker sparen.
-
Ich konnte diese Problem Lösen undem ich die pragmas anpasste
pragma comment(linker,"/EXPORT:DllCanUnloadNow,PRIVATE")
pragma comment(linker,/EXPORT:DllGetClassObject,PRIVATE")
pragma comment(linker, "/EXPORT:DllRegisterServe,PRIVATE")
pragma omment(linker,"/EXPORT:DllUnregisterServer,PRIVATE")