Использование библиотеки c++ в c#

Эй, ребята, я пытаюсь включить библиотеку c++ (DLL) в свой проект C#, но каждый раз, когда я это делаю, я получаю следующее сообщение об ошибке в VS2008, любые предложения??

EDIT: это c++ MFC DLL


Microsoft Visual Studio

ссылка на 'C:UserscholachaguddapvDesktopimaging - ... dll " не удалось добавить. Убедитесь, что файл доступен и является допустимой сборкой или COM-компонентом.

5 ответов


Если это" нормальная " DLL (не COM, не управляемый C++), вы не можете добавить ссылку, как это. Вы должны добавить подписи p/invoke (определения внешних статических методов) для экспорта, который вы хотите вызвать в своей DLL.

[DllImport("yourdll.dll")]
public static extern int ExportToCall(int argument);

посмотреть DllImport


Если это прямая библиотека C++, то невозможно ссылаться на нее таким образом.

У вас есть два варианта, вы можете скомпилировать библиотеку C++ как сборку и предоставить неуправляемый код с оболочкой C++/CLI.

или

вы можете использовать некоторые вызовы p/invoke, если библиотека предоставляет его функциональность через C API.

не могли бы вы немного расширить вопрос, чтобы включить некоторые сведения о том, как вы обычно вызываете визуализацию.dll с C++?


соглашение о вызове и разница в модели памяти между управляемым кодом (C#) и неуправляемым кодом (WIn32 c++) делают их несовместимыми.

однако .NET включает технологию моста для COM-объектов, поэтому, если вы представляете DLL-объект COM, его можно заставить работать. Однако это, по-видимому, не COM-объект.


если это неуправляемая dll, вы не можете добавить ссылку на нее. Вы должны вызвать его с помощью PInvoke или такое:

public classFoo

{

[DllImport("myunmanaged.dll", CharSet = CharSet.Ansi)]

private extern static int UnmanagedFunction(int type, int dest);

}

Если вы хотите преобразовать его в управляемую dll, посмотрите здесь: http://msdn.microsoft.com/en-us/library/aa446538.aspx

Если вы хотите узнать больше о pinvoke и dllimport, посмотрите здесь: http://msdn.microsoft.com/en-us/library/aa288468.aspx

Ура


Если это чистая DLL C++, где вы экспортируете только совместимые с C функции, то вы можете использовать P/Invoke для использования этих функций. Если вы превратите эту C++ DLL в COM DLL с библиотекой типов, используя его еще проще: вы можете импортировать библиотеку типов в .NET и .NET-оболочки (называемые вызываемыми оболочками среды выполнения) создаются для вас.