我有一个用 C# 代码构建的 Dll,由于某些需要,我想将它与 C++ 代码一起使用。
经过长时间的搜索,我找到了一个解决方案,并使用 RegASM.exe 从我的 abcd.dll 文件创建了 abcd.tlb。
导入此文件后,
#import "D:\\..\\abcd.tlb" raw_interfaces_only
当我构建解决方案时发生错误,
error C2380: type(s) preceding 'Accepted_Bills' (constructor with return type, or illegal redefinition of current class-name?) d:..\abcd.tlh
当我搜索这个错误时,我开始知道一个结构,
struct __declspec(uuid("23dbd772-5aa8-3b5a-90a1-b19e4a052166"))
Accepted_Bills
{
long Denomination;
__int64 Accepted_Bills;
};
与其成员之一同名。这在 C++ 中是不允许的。我正在使用 Visual Studio 2010 来编译它。
谁能帮我消除这个错误。非常感谢!
最佳答案
最简单的解决方案是更改接口(interface)托管端的声明。更改结构或字段的名称。
如果您不想这样做,则需要在您的 C++ 代码中进行更改。例如:
struct __declspec(uuid("23dbd772-5aa8-3b5a-90a1-b19e4a052166"))
Accepted_Bills
{
long Denomination;
__int64 _Accepted_Bills;
};
您需要在每次构建并切换到手动生成时停止自动生成头文件。
在我看来,由于您控制界面的两边,因此更改 C# 代码是迄今为止最简单的解决方案。
关于c# - 在 C++ 中使用 C# dll 时出现 C2380 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16585378/