我之前没有用C ++编程.Net - 对于Windows我现在使用C#和.Net。
我有一个C#.Net DLL,我从其他C#程序调用没有问题。但我有一个客户想要用C ++调用它,所以我正在编写一个练习应用程序,看看它是如何完成的。的 N.B。这是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#不需要复制构造函数?它需要深层复制还是只需要浅层复制?我需要知道从(managed / CLI / CLR)C ++调用C#DLL的任何其他问题?
答案 0 :(得分:1)
Ref类需要refptrs,CScannerBeam ^表示C ++中的ref_ptr - CLI。
答案 1 :(得分:1)
gcnew
评估为CScannerBeam^
您的代码与以下内容没有太大区别:
std::string s = new std::string();
这也是一个错误,右边是指针而左边不是。
就像原生C ++一样,使用
CScannerBeam SB; // creates an object with stack semantics
// it will be disposed at end the of the scope
func(sb.member);
或
CScannerBeam^ pSB = gcnew ScannerBeam(); // get handle to object on managed heap
// it has dynamic lifetime and will live as
// long as the .NET garbage collector can reach it
func(pSB->member);