Доступ к статическим методам С++ из С#

Скажем, у вас есть код С++:

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