我有一个内置C#代码的Dll,由于某些需要,我想将它与C ++代码一起使用。
经过长时间的搜索后,我找到了一个解决方案,并使用RegASM.exe从我的abcd.dll文件创建了abcd.tlb。
导入此文件后,
#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来编译它。
任何人都可以帮我删除此错误。 Thanx提前很多!!
答案 0 :(得分:2)
最简单的解决方案是更改接口管理端的声明。更改结构或字段的名称。
如果您不想这样做,则需要在C ++代码中进行更改。例如:
struct __declspec(uuid("23dbd772-5aa8-3b5a-90a1-b19e4a052166"))
Accepted_Bills
{
long Denomination;
__int64 _Accepted_Bills;
};
每次构建和切换到手动生成时,您都需要停止自动生成头文件。
在我看来,由于您控制了界面的两面,因此更改C#代码是迄今为止最简单的解决方案。
答案 1 :(得分:1)
您需要Accepted_Bills类型吗?
You can tell VS to exclude it from your inport.
#import "D:\\..\\abcd.tlb" raw_interfaces_only exclude("Accepted_Bills")
尝试尝试其他导入选项,例如high_method_prefix("Prefix")
或auto_rename
或rename(...)