2010-09-29 3 views
0

Как мне вызвать функции из C++ DLL?C# интерфейс C++ DLL?

++ DLL C содержит такие функции, как это:

__declspec(dllexport) bool Setup() { return simulation.Setup(); } 

C# программа делает это:

[DllImport("mydll.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool Setup(); 

C# программа падает со следующим сообщением, когда он пытается загрузить DLL (?) :

An unhandled exception of type 'System.BadImageFormatException' occurred in TestFrame.exe 

Additional information: There was an attempt to load a file with a wrong format (exception from HRESULT: 0x8007000B) 

The C++ DLL is a standard DLL (no MFC, no ATL). 
+1

64-разрядная сборка .NET пытается загрузить 32-разрядную нативную .dll? Наоборот? –

+0

Google переводит на 'Была сделана попытка загрузить программу с неправильным форматом. (Исключение из HRESULT: 0x8007000B) ' – SLaks

+0

Это на 64-битной ОС? Если приложение .NET скомпилировано как AnyCPU, а dll C++ - 32-разрядная, DLL не загружается. –

ответ

2

Эта ошибка возникает при попытке загрузить 32-разрядную DLL в 64-разрядный процесс. (Или наоборот)
До VS2010 проекты C# по умолчанию нацелены на любой процессор и будут работать как 64-разрядные в 64-разрядной ОС.

Вам нужно перейти на вкладку «Сборка» в «Свойства проекта» и задать только проект C# только для x86.

1

Возможно ли, что ваш exe и dll имеют разную битовость (то есть один составляет 64 и другие 32)?

0

Вы пробовали составить код для платформы x86? См. this blogpost для получения инструкций.

Смежные вопросы