Добавление C ++ DLL в проект C # - PullRequest
10 голосов
/ 22 мая 2010

Я пытаюсь использовать файл lame_enc.dll из LAME в проекте C #, но добавить это кажется невозможным.

Я получаю сообщение об ошибке, в котором говорится, что ссылкане может быть добавлено и, пожалуйста, проверьте, доступен ли, допустимая сборка или COM-компонент.

У меня нет опыта C ++, хотя я хотел бы использовать функциональность.Прямо сейчас я использую Process из .NET Framework для вызова lame.exe и делаю вещи, но я хотел бы знать, есть ли другой способ.

Ответы [ 4 ]

9 голосов
/ 22 мая 2010

Вы можете добавлять только управляемые сборки как ссылку на управляемый проект. Что я обычно делаю в этой ситуации, так это добавляю его в качестве ресурса вместо «копировать локальные» настройки. Таким образом, DLL связана и развернута с вашим проектом. Затем я использую DllImport , чтобы вручную получить нужные мне API из этой DLL.

6 голосов
/ 22 мая 2010

Вы должны использовать P / Invoke для вызова неуправляемых API из управляемого кода.

4 голосов
/ 22 мая 2010

Чтобы использовать неуправляемую dll (нативную C ++) в C #, вы должны использовать DllImport, не добавляя ссылку на проект в visual studio (и именно поэтому вы получаете ошибку).

Вот документация DllImport от MSDN.

3 голосов
/ 22 мая 2010

Вам нужно будет использовать PInvoke для вызова функций на вашем родном lame dll.Однако вы сможете вызывать только те функции, которые были экспортированы в стиле «C».

Вы можете использовать такой инструмент, как «PInvoke Interop Assistant», который поможет вам при разработке сигнатур вызовов PInvoke для созданиязвонки из C # на ваш родной dll:

http://clrinterop.codeplex.com/releases/view/14120

...