Функции C / C ++, возвращающие NaN в MonoTouch при вызове p / - PullRequest
0 голосов
/ 26 июля 2011

У меня есть два исходных файла:

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) и связываю их с MonoTouch через следующие аргументы mtouch:

-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();

Когда я вызываю GetFloat () из исходного файла C #, значение возвращается в 'NaN' вместо 3213.1294124f. Однако, если я вызываю Get10, я на самом деле получаю верное значение.

1 Ответ

3 голосов
/ 26 июля 2011

Может быть, стоит изменить тип возвращаемой функции на float?

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