从C#访问C ++静态方法

时间:2017-02-23 08:58:11

标签: c# c++ dllimport entrypointnotfoundexcept

假设您有以下C ++代码:

extern "C" {
    void testA(int a, float b) {
    }

    static void testB(int a, float b){
    }
}

我想使用DllImport在我的C#项目中访问它:

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。

我可以从C#代码访问testB吗?怎么样?

1 个答案:

答案 0 :(得分:10)

static在C ++中的含义与在C#中的含义不同。在命名空间范围内,static提供名称内部链接,这意味着它只能在包含定义的翻译单元中访问。没有静态,它有外部链接,可以在任何翻译单元中访问。

如果您想使用static

,则需要删除DllImport关键字