Использование C ++ DLL в проекте C #

Я получил C ++ dll, который должен быть интегрирован в проект C #.

Я думаю, что нашел правильный способ сделать это, но вызов dll дал мне эту ошибку: System.BadImageFormatException: Была сделана попытка загрузить программу с неправильным форматом. (Исключение из HRESULT: 0x8007000B)

Это функция в dll:

extern long FAR PASCAL convert (LPSTR filename); 

И это код, который я использую в C #

 namespace Test{ public partial class Form1 : Form { [DllImport("convert.dll", SetLastError = true)] static extern Int32 convert([MarshalAs(UnmanagedType.LPStr)] string filename); private void button1_Click(object sender, EventArgs e) { // generate textfile string filename = "testfile.txt"; StreamWriter sw = new StreamWriter(filename); sw.WriteLine("line1"); sw.WriteLine("line2"); sw.Close(); // add checksum Int32 ret = 0; try { ret = convert(filename); Console.WriteLine("Result of DLL: {0}", ret.ToString()); } catch (Exception ex) { lbl.Text = ex.ToString(); } } }} 

Любые идеи о том, как это сделать?

Большое спасибо, Фрэнк

попробуйте использовать __stdcall (или WINAPI или APIENTRY ) в функции, экспортируемой из DLL.

Попробуйте переключить свой код C # с AnyCPU на x86 (в диалоговом окне «Свойства»).

Ваша экспортированная функция использует соглашение о вызове PASCAL , которое в Windows совпадает с stdcall . Время выполнения .Net должно знать об этом, поэтому измените свою подпись метода C # следующим образом:

 [DllImport("convert.dll", SetLastError = true, CallingConvention=CallingConvention.StdCall)] static extern Int32 convert([MarshalAs(UnmanagedType.LPStr)] string filename); 

Два основных этапа:

1- Создание dll C ++

В визуальной студии

 **New->Project->Class Library** in c++ template Name of project here is first_dll in visual studio 2010. Now **declare your function as public** in first_dll.h file and write the code in first_dll.cpp file as shown below. 

Файл заголовка

Файл Cpp

 Check **Project-> Properties -> Configuration/General -> Configuration Type** this option should be **Dynamic Library(.dll)** and build the solution/project now. 

Файл first_dll.dll создается в папке Debug

2- Связывание в проекте C #

Открытый проект C #

 Rightclick on project name in solution explorer -> Add -> References -> Browse to path where first_dll.dll is created and add the file 

Добавьте эту строку вверху в проект C #

 Using first_dll; 

Теперь доступ к файлу можно получить с помощью инструкции ниже в некоторой функции

 double var = Class1.sum(4,5); 

Я связал проект .dll проекта C ++, созданный в VS2010, в проект C #, созданный в VS2013. Это работает хорошо.