bool succeeded()
{
return false;
}
Kun sitä kutsutaan managed koodista, niin sinne palautuu arvo true.
[DllImport("mylibrary.dll")]
static extern bool succeeded();
...
void MyMethod() {
bool success = succeeded();
// success is now true
}
ANSI C standardi määrittää bool:n yhden tavun arvoksi, 1=true, 0=false. Tässä tapauksessa sitä käsitellää nelitavuisena BOOL-tyyppisenä arvona. Ratkaisuna on nollata eax-rekisteri ennen return-lausetta (tai laittaa sinne mikä tahansa alle 256 luku):
__asm { xor eax, eax };Toinen (oikea) vaihtoehto on määritellä paluuarvo "oikein".
[DllImport("mylibrary.dll")]
[return:MarshalAs(UnmanagedType.I1)] // A 1-byte signed integer.
static extern bool succeeded();
- Google Groups -keskustelu: Bool return type from virtual method
