Скажем, у вас есть следующий код C ++:
extern "C" {
void testA(int a, float b) {
}
static void testB(int a, float b){
}
}
Я хочу получить доступ к этому в моем проекте C # с помощью 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
из моего кода C #? Как?
static
не означает то же самое в C ++, как в C #. На уровне пространства имен, static
дает внутреннюю связь имени, означающую, что она доступна только в пределах единицы перевода, содержащей определение. Без статики он имеет внешнюю связь и доступен в любом модуле перевода.
Вам нужно будет удалить static
Ключевое слово, когда вы хотите использовать DllImport
Других решений пока нет …