c++ dll匯出函式返回false值C#卻認為是true的處理方法
阿新 • • 發佈:2018-11-23
在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)]