2011-07-26 31 views
0

我有兩個源文件:C/C++函數返回的NaN在MonoTouch中當p /調用

File.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_flags 「-cxx -framework安全-L $ {} PROJECTDIR -lNumbers -force_load $ {} PROJECTDIR /libNumbers.a」

那麼C#源文件我有此:

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

當我打電話GetFloat()從C#源內部文件中 '的NaN',而不是3213.1294124f返回的值。如果我調用Get10,但是我實際上得到了正確的返回值。

回答

3

也許將此函數的返回類型更改爲float是否可行?

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

很好看!可惜它不能解決我的問題:(仍然從GetFloat獲得NaN,我甚至從Get10獲得NAN,所以我不認爲它與功能本身有關 – tweetypi

+0

然後編輯問題 – unkulunkulu

+0

@meds,實際上,如何獲得NAN的整數值?請提供C#代碼中其他函數的聲明。 – unkulunkulu