外部定义的C函数返回值不正确,可能与入口点有关

本文关键字:入口 定义 函数 不正确 返回值 外部 | 更新日期: 2023-09-27 18:03:11

我在xcode中编译了一个静态库,它只包含一个。c源文件:

int Get10()
{
    return 10;
}

在。cs源文件中是这样包含的:

    [DllImport ("__Internal",EntryPoint="UIRectFrameUsingBlendMode")]
    private static extern int Get10 ();

但是Get10()的返回值是'0'。注意EntryPoint是UIRectFrameUsingBlendMode,没有理由这样做,如果我删除EntryPoint函数Get10()没有找到,并抛出一个异常的效果,虽然这可能与问题有关。问题是,虽然我不确定什么入口点定义为库基本上是一个单一的c源文件与一个函数。我曾尝试使用EntryPoint="Get10",但结果是:

系统。EntryPointNotFoundException: Get10 at(包装器)ChicksnVixens需要)。ChicksnVixensGame:Get10 () at* * * * * * * * * * * * * * * * * * */ChicksnVixens/ChicksnVixensGame.cs: 36

代码正在iPhone模拟器的MonoDevelop中编译和运行。

知道为什么吗?

外部定义的C函数返回值不正确,可能与入口点有关

如果存在,EntryPoint应该与本机方法的名称匹配。如果您想在托管端重命名方法(否则就不要使用它),这很有用。

我的猜测是你的库没有正确链接或Get10符号不可见(例如C中的静态)。在这种情况下,运行时应该抛出一个EntryPointNotFoundException。

'nm'和'otool'都可以列出从静态库导出的内容(即您应该看到Get10,否则它是本机库上的构建问题)。查看两个工具上的'man'来获取列表