Я пытаюсь очень базовое взаимодействие между двумя языками. У меня в основном есть код с высокой степенью производительности, который я хочу обрабатывать на C++, а затем возвращать результат в мое приложение.Как взаимодействовать между C# и C++
Все будет скомпилировано в Visual Studio.
Я выбрал int, чтобы быть входным и выходным типом, поскольку сортировка может быть немного выигрышной и не совсем то, с чем я имею дело.
C++ У меня есть:
#include "stdafx.h" // default from vs2013, no idea what it is
_declspec(dllexport) int Diu(int p) {
return p * 2;
}
C# У меня есть:
using System;
namespace Interop {
public class Program{
[System.Runtime.InteropServices.DllImport("Hardworker.dll")]
public static extern int Diu(int p);
private static void Main(string[] args) {
Console.WriteLine(Diu(2));
}
}
}
Так что это довольно простой пример. Но я получаю исключение:
An unhandled exception of type 'System.BadImageFormatException' occurred in Interop.exe
Additional information: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
Проект C++ создан как консольное приложение> Dll в диалоговом окне создания. Я проверил dll C++ в дизассемблере, и я вижу в качестве экспортированного символа Diu.
Uh. Что я пропустил по поводу настройки взаимодействия?
Ницца. Я мой компьютер x64. Я установил компиляцию в x86. И ошибка изменилась на EntryPointNotFoundException: Не удалось найти точку входа с именем «Diu» в DLL «Hardwork.dll». – CyberFox
@CyberFox C++ управляет именами функций на основе типов параметров и другими квалификаторами функции. Вам нужно объявить функцию 'extern 'C" для экспорта с именем без mangling. –
@YngveHammesrland это действительно сработало. 2 ответов в 1. – CyberFox