为什么我的 dllimport 函数总是 return 为真?
Why does my dllimport function always return true?
关于从管理不善的 C++ dll 中导出的函数,我遇到了一个奇怪的问题,我在 C# 代码中使用它:无论我如何 return 在 C++ 中。我缩小范围并得到一个包含以下代码的 C++ 文件:
#ifdef __cplusplus
extern "C" {
#endif
__declspec(dllexport) bool init()
{
return false;
}
#ifdef __cplusplus
}
#endif
我将其构建到一个 dll 中并在 C# 中导入函数:
using System;
using System.Runtime.InteropServices;
namespace Test
{
class TestDll
{
[DllImport( "dlltest_d" )]
public static extern bool init();
}
class Program
{
static void Main( string[] args )
{
if( !TestDll.init() )
{
Console.WriteLine( "init failed" );
return;
}
Console.WriteLine( "init succeeded" );
}
}
}
当我运行这个时,我得到以下输出:
init succeeded
我很纳闷。有什么想法吗?
bool
是 可怕的 原生类型。每个人都按照自己的方式去做。在 C# 中,bool
上的默认互操作映射到 BOOL
C++ 类型,它处理与 bool
.
不同的值
您需要使用 [return:MarshalAs(UnmanagedType.I1)]
指定正确的编组,并且不要忘记使用 C 调用约定。
关于从管理不善的 C++ dll 中导出的函数,我遇到了一个奇怪的问题,我在 C# 代码中使用它:无论我如何 return 在 C++ 中。我缩小范围并得到一个包含以下代码的 C++ 文件:
#ifdef __cplusplus
extern "C" {
#endif
__declspec(dllexport) bool init()
{
return false;
}
#ifdef __cplusplus
}
#endif
我将其构建到一个 dll 中并在 C# 中导入函数:
using System;
using System.Runtime.InteropServices;
namespace Test
{
class TestDll
{
[DllImport( "dlltest_d" )]
public static extern bool init();
}
class Program
{
static void Main( string[] args )
{
if( !TestDll.init() )
{
Console.WriteLine( "init failed" );
return;
}
Console.WriteLine( "init succeeded" );
}
}
}
当我运行这个时,我得到以下输出:
init succeeded
我很纳闷。有什么想法吗?
bool
是 可怕的 原生类型。每个人都按照自己的方式去做。在 C# 中,bool
上的默认互操作映射到 BOOL
C++ 类型,它处理与 bool
.
您需要使用 [return:MarshalAs(UnmanagedType.I1)]
指定正确的编组,并且不要忘记使用 C 调用约定。