Как использовать c # Dll в vc ++? - PullRequest
7 голосов
/ 11 июня 2009

Я создал DLL, используя командную строку (CSC). Предположим, что dll содержит метод Add (int, int). Теперь я хочу использовать эту функцию добавления в vc ++ ??

Как это сделать?

Ваша помощь будет высоко оценена.

Вот что я делаю.

vcproj; Для этого проекта у меня есть щелчок правой кнопкой мыши и раздел компоновщика добавить дополнительные зависимости. Добавил путь, где находится DLL.

main.cpp

using namespace Test

void main()

{

  demo d;

  d.add(5,5);

}

Ошибка пространства имен Тест не существует.

Как решить эту проблему?

Мне нужно использовать эту DLL как в неуправляемом коде

Ответы [ 3 ]

9 голосов
/ 11 июня 2009

Ваша сборка C # нуждается в атрибуте ComVisible (среди прочего).

[assembly: ComVisible(true)] 

Здесь есть руководство для этого .

8 голосов
/ 11 июня 2009

Из форумов MSDN Вызов C # из неуправляемого C ++ :

То, что вы хотите сделать, это компилировать только файлы, где вы хотите загрузить код C # / clr, а затем вызвать прочь с помощью C ++ / CLI. Остальные ваши приложение останется родным, пока эти cpp файлы, которые вы компилируете / clr, будут смешаны родной и клр. Ты должен быть способен просто позвоните в свою библиотеку C #, используя Синтаксис C ++ / CLI.

Как только вы бросаете / clr на cl.exe командная строка для файла, в этом файл, вы можете вызвать любой управляемый код что вы хотите, независимо от того, это было написано на VB.net, C # или C ++ / CLI. Это, безусловно, самый простой способ сделать то, что вы хотите сделать (вызов C # код из вашего родного приложения C ++), хотя у него есть свои предостережения и ограничения. По большому счету, хотя "Это Просто работает ". Кроме того, это быстрее, чем р / вызывающие.

2 голосов
/ 11 июня 2009

Это сильно зависит от того, какой тип приложения C ++ вы создаете. Если вы собираете сборку C ++ / CLI, вам необходимо убедиться, что в проекте есть ссылка на C # DLL. Как только это будет сделано, вы сможете набрать код в письменном виде, предполагая, что у вас есть такое определение Demo.

namespace Test {
  public class demo {
    public void add(int left, int right) { 
      ...
    }
  }
}

Если вы создаете обычный неуправляемый проект на C ++, вы должны использовать COM-взаимодействие для доступа к сборке. Это включает создание демонстрационного типа в вашем C # проекте COMVisible и его регистрацию для взаимодействия COM. После чего вы можете получить к нему доступ, как и любой другой компонент COM.

...