C # интерфейс C ++ DLL? - PullRequest
       3

C # интерфейс C ++ DLL?

0 голосов
/ 30 сентября 2010

Как я могу вызывать функции из C ++ DLL?

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

__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).

Ответы [ 4 ]

3 голосов
/ 30 сентября 2010

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

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

1 голос
/ 30 сентября 2010

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

0 голосов
/ 30 сентября 2010

Может быть неуместно устанавливать архитектуру ЦП (цель платформы) для сборки, но вместо этого вы можете указать альтернативный путь, чтобы найти правильную DLL для загрузки.

Как использовать правильный неуправляемый файл DLL в соответствии с архитектурой процессора? (32/64 бита)

0 голосов
/ 30 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...