2012-03-28 6 views
1

Ich versuche, einige Funktionen eines C++ nativen in VB.NET aufzurufen, aber ich habe ein seltsames Problem. Wenn ich meine C++ DLL im Freigabemodus kompiliere funktioniert es, wenn ich es im Debug-Modus kompiliere einen Fehler wie:Kann C++ DLL in .NET mit/OPT nicht laden: NOREF

DLL 'DllName.dll' kann nicht geladen werden: Der Parameter ist falsch. (Ausnahme von HRESULT: 0x80070057 (E_INVALIDARG))

Ich dachte am Anfang, dass ein Problem mit MSVCR100D.dll könnte, die im Debug-DLLs verwiesen wird, aber das war nicht der Fall.

Stattdessen entdeckte ich, dass wenn ich meine C++ DLL mit Option /OPT:NOREF kompilieren nicht funktioniert; wenn ich stattdessen kompiliere es mit /OPT:REF es funktioniert.

Ich bin jetzt ein bisschen verloren, weißt du, was könnte das Problem in diesem Fall sein?

+0

Einige Windows-API-Funktion schlägt fehl, wenn die DLL geladen wird. Sie müssen einen nicht verwalteten Debugger verwenden, um herauszufinden, warum. Beginnen Sie mit dem Debuggen der DllMain() - Funktion. –

+0

@Hans Passant Ich habe versucht, es nativ zu debuggen, aber es scheint, dass die Ausnahme vom System KernelBase.dll ausgelöst wird, und ich habe keinen Zugriff auf diesen Code. – Drake

+0

Sie können davon ausgehen, dass der Fehler nicht in kernelbase.dll liegt. Stellen Sie sicher, dass der Microsoft Symbol Server ordnungsgemäß konfiguriert ist, und buchen Sie den Aufruf-Stack. –

Antwort

-1

Ich denke, Sie müssen die DLL zum gleichen Modell ausfallen.