C# C/C++;调用p/时以单触方式返回NaN的函数

C# C/C++;调用p/时以单触方式返回NaN的函数,c#,c++,c,xamarin.ios,pinvoke,C#,C++,C,Xamarin.ios,Pinvoke,我有两个源文件: 文件.h: class Numbers { public: int Get10(); int Get192(); float GetFloat(); }; File.cpp: int Numbers::Get10() { return 10; } int Numbers::Get192() { return 192; } float Numbers::GetFloat() { return 3213.1294124f; }

我有两个源文件:

文件.h:

class Numbers
{
public:
    int Get10();
    int Get192();   
    float GetFloat();
};
File.cpp:

int Numbers::Get10()
{
    return 10;
}
int Numbers::Get192()
{
    return 192;
}
float Numbers::GetFloat()
{
    return 3213.1294124f;
}

extern "C"
int Get10()
{
    Numbers n;
    return n.Get10();
}

extern "C"
int Get192()
{
    Numbers n;
    return n.Get192();
}

extern "C"
int GetFloat()
{
    Numbers n;
    return n.GetFloat();
}
我将它们编译成一个静态库(libNumbers.a),并通过以下mtouch参数将其与MonoTouch链接起来:

-v-v-v-gcc_标志“-cxx-frameworksecurity-L${ProjectDir} -lNumbers-强制加载${ProjectDir}/libNumbers.a“

然后在C#源文件中,我有以下内容:

    [DllImport("__Internal",EntryPoint="GetFloat")]
    public static extern float GetFloat();

当我从C#源文件内部调用GetFloat()时,返回的值是'NaN'而不是3213.1294124f。如果我调用Get10,实际上我得到了正确的返回值。

也许将此函数的返回类型更改为
float
是一种方法

extern "C"
int GetFloat()
{
    Numbers n;
    return n.GetFloat();
}

也许将此函数的返回类型更改为
float
是一种方法

extern "C"
int GetFloat()
{
    Numbers n;
    return n.GetFloat();
}

好样的!可惜这不能解决我的问题:(仍然从GetFloat中得到NaN,我甚至从Get10中得到NaN,所以我认为这与函数本身无关。@meds,实际上,如何准确地得到整数值的NaN?请用C#代码提供其他函数的声明。@meds,再等一下,在问题中你说
Get10
产生正确的分辨率请澄清,抱歉,我发现我的错误是在C++中如何声明函数,一旦我按照你的答案修改C++源文件,我忘记了我已经把外部函数的返回时间改为C文件中的int,这使我感到困惑。解决我的问题,但我感到困惑,因此为什么会出现混乱。很抱歉!发现得很好!可惜它不能解决我的问题:(仍然从GetFloat中得到NaN,我甚至从Get10中得到NaN,所以我认为这与函数本身无关。@meds,实际上,如何准确地得到整数值的NaN?请用C#代码提供其他函数的声明。@meds,再等一下,在问题中你说
Get10
产生正确的分辨率请澄清,抱歉,我发现我的错误是在C++中如何声明函数,一旦我按照你的答案修改C++源文件,我忘记了我已经把外部函数的返回时间改为C文件中的int,这使我感到困惑。我对我的问题很抱歉,但是我很困惑,所以为什么会把事情搞砸了!