【发布时间】:2011-07-26 19:23:23
【问题描述】:
我有两个源文件:
文件.h:
class Numbers
{
public:
int Get10();
int Get192();
float GetFloat();
};
文件.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_flags "-cxx -framework Security -L${ProjectDir} -lNumbers -force_load ${ProjectDir}/libNumbers.a"
然后在 C# 源文件中我有这个:
[DllImport("__Internal",EntryPoint="GetFloat")]
public static extern float GetFloat();
当我从 C# 源文件中调用 GetFloat() 时,返回的值是 'NaN' 而不是 3213.1294124f。但是,如果我调用 Get10,我实际上会返回正确的值。
【问题讨论】:
标签: c# c++ c xamarin.ios pinvoke