【发布时间】:2014-07-17 21:46:03
【问题描述】:
您好,我正在学习 c++/cli 并为此阅读专家 c++/cli 这本书。 在书中作者指出“编译器选项 /clr:pure 仍然允许您 将现有的 C++ 代码编译为托管代码(源代码兼容性)”。这是否意味着可以使用 /clr:pure 重新编译在 CRT 堆中初始化的对象的现有本机代码?
更新 1:例如 Class B 可以用 /clr:pure 编译吗?
Class A {
Public :
A()
{
}
~A()
{
}
void Foo()
{
}
};
Class B {
Public :
A* test;
B()
{
test = new A();
test->Foo();
}
~B()
{
delete test;
}
};
MSDN 声明
纯程序集(使用 /clr:pure 编译)可以包含本机和 托管数据类型,但仅限托管函数
和
/clr:纯
生成仅 Microsoft 中间语言 (MSIL) 的输出文件,没有本机可执行代码。但是,它可以包含编译为 MSIL 的本机类型。
根据我的理解(我可能在这里错了) test = new A();生成本机代码,因此无法使用 /clr:pure 进行编译。如果我错了,谁能给我一个例子
- 本机函数(如 MSDN 所述,只有托管函数是 允许)
- 可以使用 /clr 和 不是 /clr:pure
谢谢
【问题讨论】:
-
类不会被初始化,对象会。提供您正在谈论的本机代码示例。
-
@BenVoigt 对不起我的错误。我已更正它并发布了一个简单的代码示例
-
/clr:pure生效时,所有功能都被管理。请注意,您仍在使用本机库调用 - 对于/clr:pure,这些调用将使用 p/invoke 而不是 IJW C++ 互操作来执行。
标签: visual-c++ c++-cli