C++ cli 如何从C++/CLI程序集

C++ cli 如何从C++/CLI程序集,c++-cli,C++ Cli,我有一个C++/CLI程序集,它提供了一些封装本机代码的托管类。是否可以从托管类中的方法返回托管布尔值 例如,如果我在这样一个类中有此方法: bool Func1() { return true; } 然后,使用ILSpy将返回类型封送为: [return: MarshalAs(UnmanagedType.U1)] public bool Func1() { return true; } 我还尝试返回System::Boolean: System::Boolean Func2() {

我有一个C++/CLI程序集,它提供了一些封装本机代码的托管类。是否可以从托管类中的方法返回托管布尔值

例如,如果我在这样一个类中有此方法:

bool Func1() { return true; }
然后,使用ILSpy将返回类型封送为:

[return: MarshalAs(UnmanagedType.U1)]
public bool Func1()
{
    return true;
}
我还尝试返回System::Boolean:

System::Boolean Func2() { return true; }
但它也使用相同的非托管类型封送:

[return: MarshalAs(UnmanagedType.U1)]
public bool Func2()
{
    return true;
}

是否可以在不进行封送处理的情况下返回托管布尔值?

只要使用有效的/clr进行编译,它实际上是程序集元数据中的System::Boolean。ILSpy不能显示非托管布尔,它不能反编译为本机C++代码。编译器只是在返回类型的封送方面比严格必要的更加明确。这不是不合理的,bool很难,因为C语言没有它,而且有太多的typedef需要添加,很少有人同意它的大小。谢谢你的回复。我刚刚也检查了ildasm.exe,它将函数列为“Func1:bool()”和“Func2:bool()”——这表明它们是托管布尔函数,尽管反汇编的IL也会显示“marshal(unsigned int8)”:.method public hidebysig instance bool marshal(bool)Func1a()cil管理ildasm.exe的作者还决定将System::Boolean反编译为“bool”。这是一个非常合理的选择。marshal指令就是让您看到[MarshalAs]的指令。正如我所说,这不是绝对必要的,但也没有错。你没有问题。“你没有问题”-太好了,谢谢汉斯:)