Доступ к статическим методам С++ из С#
Скажем, у вас есть код С++:
extern "C" {
void testA(int a, float b) {
}
static void testB(int a, float b){
}
}
Я хочу получить доступ к этому в моем проекте С# с помощью DllImport
:
class PlatformInvokeTest
{
[DllImport("test.so")]
public static extern void testA(int a, float b);
[DllImport("test.so")]
internal static extern void testB(int a, float b);
public static void Main()
{
testA(0, 1.0f);
testB(0, 1.0f);
}
}
Это отлично работает для testA
, но testB
не запускает исключение EntryPointNotFoundException.
Могу ли я получить доступ к testB
из моего кода на С#? Как?
Ответы
Ответ 1
static
не означает то же самое в С++, что и в С#. В области пространства имен static
указывается внутренняя ссылка имени, что означает, что она доступна только в пределах единицы перевода, которая содержит определение. Без статики он имеет внешнюю связь и доступен в любой единицы перевода.
Вам нужно будет удалить ключевое слово static
, если вы хотите использовать DllImport