2017-02-23 38 views
10

Предположим, вы следующий C++ код:Access C++ статические методы из 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#? Как?

+6

функция объявлена ​​* * Статическая на глобальный масштаб не имеет внешних связей, так и не могут быть экспортированы. Вам придется удалить статику. Возможно, вы сбиваете с толку его с объявлением функции члена класса, объявляя ее статикой, что-то совсем другое. –

ответ

8

static не означает то же самое в C++, что и в C#. В области пространства имен static дает внутреннюю ссылку имени, что означает, что она доступна только в блоке перевода, который содержит определение. Без статики он имеет внешнюю связь и доступен в любой единицы перевода.

Вам нужно будет удалить static ключевое слово, если вы хотите использовать DllImport

Смежные вопросы