1. 程式人生 > >c++ dll匯出函式返回false值C#卻認為是true的處理方法

c++ dll匯出函式返回false值C#卻認為是true的處理方法

轉發網址https://stackoverflow.com/questions/1792581/c-from-c-c-function-in-a-dll-returning-false-but-c-sharp-thinks-its-tr

在C++中宣告匯出函式

bool Foo()
{
  return false;
}

在C#中引用程式碼

public class FooAPI
{
    [DllImport("Foo.dll")]
    public static extern bool Foo();
}

//......

bool b = FooAPI.Foo()
; if (!b) { // Throw an exception }

在Foo函式返回值為true時一切正常,當返回值為false時C#獲取的值依然為true,其解決方法是在引入函式時增加返回修飾

public class FooAPI
{
    [DllImport("Foo.dll")]
    [return: MarshalAs(UnmanagedType.I1)]
    public static extern bool Foo();
}

注意不能使用[return: MarshalAs(UnmanagedType.Bool)]