Ошибка компиляции при вызове управляемого C ++ из C # - PullRequest
0 голосов
/ 20 марта 2011

Я новичок в .net. У меня есть управляемая библиотека C ++. Похоже на это.

// header file
namespace cppnetdll
{
public __gc class Class1
{
public:
static int foo_int(void);
};
}

// source file
namespace cppnetdll
{
int Class1::foo_int(void)
{
return 123;
}
}

Я могу вызвать это из управляемой программы на С ++. Когда я пытаюсь позвонить с C # программа, я получаю сообщение об ошибке компилятора: «Тип или имя пространства имен «Class1» не может быть найден (отсутствует директива using или ссылка на сборку?) "Ошибка относится к строке DllImport ниже.

Вот код C # [Код: 1: a72c1df571] пространство имен csuser { публичный класс ххх { [DllImport ("cppnetdll.dll")] extern int Class1.foo_int ();

private void yyy() { int i =
foo_int(); }
}
}[/code:1:a72c1df571]

Я пробовал разные подходы, но безуспешно. Что такое магия синтаксис?

Забавно, что я могу честно вызывать неуправляемые функции C ++ из C # легко объявив функции как "C" и экспортировав из DLL. Я ожидал, что вызов управляемого кода будет проще. Может быть, это так просто что никто не думал документировать это!

Ответы [ 2 ]

3 голосов
/ 20 марта 2011

Вы не используете директиву [DllImport] для вызова кода, написанного на управляемом C ++.Это предназначено только для собственных библиотек DLL, которые экспортируют свои функции.Ни то, ни другое не относится к вашей, оно не является нативным, и вы не экспортируете функцию.

Вы создали управляемую сборку, вы можете обращаться с ней так же, как вы написали бы в C #.Проект + Добавить ссылку, вкладка Обзор, перейдите к DLL.Или, что еще лучше, поместите оба проекта в одно решение, используйте вкладку «Проекты» для выбора ссылки.

1 голос
/ 20 марта 2011

Вместо использования [DllImport ...]

Попробуйте просто добавить ссылку, вот как из MSDN: http://msdn.microsoft.com/en-us/library/7314433t%28v=VS.90%29.aspx

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