gpt4 book ai didi

C++/命令行界面 : Why is there no Managed->Unmanaged transition in this scenario?

转载 作者:太空宇宙 更新时间:2023-11-03 10:34:35 25 4
gpt4 key购买 nike

假设我有一个使用/clr 开关编译的 C++/CLI 程序集。在该程序集中,有一些托管类调用在同一程序集中定义的非托管(普通 C++)类。当您使用 Visual Studio 进行调试并查看调用堆栈时,它会向您显示托管-> 非托管和非托管-> 托管转换发生的位置。

那么,引起我注意的是:当其中一个托管类从同一程序集调用其中一个非托管类时,为什么没有托管/非托管转换?那些非托管类是否以某种方式在幕后变成了托管类?

最佳答案

可能是因为您没有告诉编译器您希望将“非托管代码”编译为机器代码。在/clr 生效的情况下,所有代码都被编译为 IL。标准 C++ 代码没有问题,只有少数语言结构不受支持。

如果您将代码混合在源代码文件中,那么您可以使用#pragma 来切换:

#pragma managed(push, off)
// Unmanaged code here
// ...
#pragma managed(pop)

// Your ref classes here
// ...

如果您 #include 任何包含非托管代码声明的 header ,您也将需要它。

关于C++/命令行界面 : Why is there no Managed->Unmanaged transition in this scenario?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6497772/

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