2016-06-02 40 views
0

Ich habe Code in C++ und C#, die über COM verbunden sind. C# generiert TLB und DLL, die in C++ enthalten sind.Verknüpfung zwischen C# und C++ Code funktioniert nicht in 64-Bit-Maschine

C# TLB-Datei ist in meinem System registriert. Ich habe die ganze Codierung in 32-Bit-Maschine gemacht. Jetzt habe ich die gleichen zwei Programme auf meiner 64-Bit-Maschine genommen und sie gebaut. Die Builds sind erfolgreich und die DLL/TLB-Dateien werden generiert. In 64-Bit-Maschine, durch C++ - Code wird es ausgeführt und gibt das richtige Ergebnis. Aber immer wenn das C# -Verknüpfungscode-Snippet in meinem C++ - Code auftritt, wird die Codeausführung gestoppt, ohne einen Fehler zu verursachen.

Was kann das Problem sein?

+0

Haben Sie versucht, den C++ - Code in 64bit zu bauen, dann bauen Sie C# mit der 64bit-Version der DLLs auf? –

+0

@StianStandahl Ja, ich habe beide Codes in 64-Bit-Maschine gebaut. – user6413829

+0

das ist in Ordnung. Aber haben Sie 64x Build-Konfiguration gewählt oder ist es irgendeine CPU? Denn, wenn Sie C++ Referenzen in C# -Code haben, müssen Sie den C++ Code mit 64bit Build-Konfiguration –

Antwort

0

Es ist wirklich egal, wo Sie den Programmcode erstellen. VS selbst ist 32-Bit, und die Compiler (CSC.EXE, CL.EXE) sind 32-Bit selbst.

Sie müssen sicherstellen, dass das C# -Programm auf dem 64-Bit-Computer mit der C++ - Plattform entspricht. Wenn Sie AnyCPU für C# und 32-Bit für C++ verwendet haben, wird es einfach nicht ausgeführt.

Stellen Sie sicher, dass C++ - und C# -Code (zur Laufzeit) auf dieselbe Plattform (Laufzeitumgebung) abzielen. Eine native (C++) Binärdatei (EXE/DLL) bleibt 32-Bit, wenn sie für 32-Bit und 64-64 erstellt wurde. Ein C# -Binär (IL) wird gemäß dem aktuellen Betriebssystem in 32-Bit oder 64-Bit kompiliert. Bestätige das.

+0

@ downvoter, Care zu erklären? Was habe ich verpasst? – Ajay