在c++中使用c# dll时出现C2380错误
C2380 error while using C# dll in C++
我有一个内置在c#代码的Dll,由于一些需要,我想使用它与c++代码。
经过长时间的搜索,我找到了一个解决方案并创建了abcd。
使用RegASM.exe从我的abcd.dll文件中删除。导入该文件后,
#import "D:\..\abcd.tlb" raw_interfaces_only
当我构建解决方案时出现错误,
错误C2380:类型前面的Accepted_Bills(构造函数返回类型,或非法重新定义当前类名?)d:..abcd.tlh
当我搜索这个错误时,我发现有一个结构,
struct __declspec(uuid("23dbd772-5aa8-3b5a-90a1-b19e4a052166"))
Accepted_Bills
{
long Denomination;
__int64 Accepted_Bills;
};
具有与其成员之一相同的名称。这在c++中是不允许的。我使用Visual Studio 2010来编译这个。
有谁能帮我删除这个错误吗?提前非常感谢!!最简单的解决方案是更改接口托管端的声明。修改结构体或字段的名称
如果你不想这样做,你需要在你的c++代码中进行修改。例如:
struct __declspec(uuid("23dbd772-5aa8-3b5a-90a1-b19e4a052166"))
Accepted_Bills
{
long Denomination;
__int64 _Accepted_Bills;
};
您需要在每次构建时停止自动生成头文件,并切换到手动生成。
在我看来,既然你控制了接口的两边,改变c#代码是目前为止最简单的解决方案。
是否需要Accepted_Bills类型?
你可以告诉VS从你的导入中排除它。
#import "D:\..\abcd.tlb" raw_interfaces_only exclude("Accepted_Bills")
尝试使用其他导入选项,例如high_method_prefix("Prefix")
或auto_rename
或rename(...)
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 错误 C2380:类型在"Form1"OpenCV C 标头之前
- 在c++中使用c# dll时出现C2380错误