【发布时间】:2014-01-30 21:23:08
【问题描述】:
在 .Net 之前我没有使用 C++ 编程——对于 Windows,我现在使用 C# 和 .Net。
我有一个从其他 C# 程序调用的 C# .Net DLL,没有任何问题。但是我有一个客户想从 C++ 调用它,所以我正在编写一个练习应用程序来看看它是如何完成的。 注意这是 C++/CLI,即它是一个托管的 CLI-CIL-CLR 应用程序。
在我的 C# 程序中,我将我的 DLL 添加为引用,然后在我的代码中我有一个 using 语句,然后实例化它。 . .
using ScannerBeam;
. . .
CScannerBeam SB = new CScannerBeam();
。 . .工作一种享受,没有问题。但在 C++ 中,我还将 DLL 添加为引用并执行
using namespace ScannerBeam;
. . .
CScannerBeam SB = gcnew CScannerBeam();
...我得到一个错误。 . .
错误 1 错误 C3673: 'ScannerBeam::CScannerBeam' : 类没有复制构造函数
为什么 C# 不需要复制构造函数?它需要一个深拷贝还是只需要一个浅拷贝?我需要知道从(托管/CLI/CLR)C++ 调用 C# DLL 的任何其他问题?
【问题讨论】:
-
我觉得你需要
CScannerBeam^。 -
欢迎来到对象有内容的 C++ - 在 C++/cli 中,您必须处理托管指针 T^(指针 T*、引用 T& 和普通值 T)
-
@DieterLücking:
T^是一个“跟踪句柄”。并且不要忘记跟踪参考T%。还有interior_ptr<T>。 -
宾果游戏。我猜 C++ 自古以来已经发生了变化。