Estoy escribiendo una pequeña aplicación de C# que llama a algunas funciones en una API de C++. Tengo el código de C++ en una DLL, y el código de C# llama a la API usando DllImport. (Estoy usando un archivo .def para el C++ DLL de modo que no necesito extern "C".)C++ de C#: la función C++ (en una DLL) devuelve falso, pero C# cree que es verdad.
Hasta ahora, la API tiene una función, que en la actualidad no hace absolutamente nada:
bool Foo()
{
return false;
}
En C#, tengo los siguientes:
public class FooAPI
{
[DllImport("Foo.dll")]
public static extern bool Foo();
}
...
bool b = FooAPI.Foo();
if (!b)
{
// Throw an exception
}
mi problema es que, por alguna razón, b está siempre evaluando a VERDADERO. Tengo un punto de interrupción en if (! B) y el depurador lo informa como 'verdadero', irrelevante de lo que devuelve la función C++.
¿El boletín C# es el mismo que el bool C++? Aunque incluso si este no era el caso, todavía no entiendo cómo encontraría el valor de retorno como 'verdadero' :)
¿Alguien puede ayudarme con esta extraña discrepancia?
¡Gracias de antemano!
Si usted tiene la C++ retorno de la función cierto lo que hace su método C# ver como el valor de retorno? –
¿Podría mostrarnos el código donde usa el método FooAPI.Foo()? – Kevin
¿No debería declararse su función C++ externamente "C"? –