gpt4 book ai didi

c# - 来自 C# : C++ function (in a DLL) returning false, 的 C++,但 C# 认为这是真的!

转载 作者:可可西里 更新时间:2023-11-01 15:04:00 27 4
gpt4 key购买 nike

我正在编写一个 C# 小应用程序,它调用 C++ API 中的几个函数。我将 C++ 代码构建到 DLL 中,C# 代码使用 DllImport 调用 API。 (我正在为 C++ DLL 使用 .DEF 文件,所以我不需要 extern "C"。)

到目前为止,API 只有一个函数,目前它什么都不做:

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
}

我的问题是,出于某种原因,b 的计算结果始终为 TRUE。我在 if (!b) 上有一个断点,调试器将其报告为“真”,与 C++ 函数返回的内容无关。

C# 的 boolean 值与 C++ 的 boolean 值相同吗?尽管即使情况并非如此,我仍然不明白它如何找到返回值为“真”的:)

谁能帮我解决这个奇怪的差异?

提前致谢!

最佳答案

尝试 [返回:MarshalAs (UnmanagedType.I1)]。默认情况下,C# 互操作 marshals C# bool as the Win32 BOOL ,与 int 相同,而 C++ bool 是一个字节 AFAIR。因此,C# 的默认编码(marshal)处理期望返回值是 eax 寄存器中的 BOOL,并拾取一些非零垃圾,因为 C++ boolal 中返回。

关于c# - 来自 C# : C++ function (in a DLL) returning false, 的 C++,但 C# 认为这是真的!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1792581/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com