C2380在C+中使用C#dll时出错+; 我在C代码中有一个DLL,由于需要,我想用C++代码使用它。

C2380在C+中使用C#dll时出错+; 我在C代码中有一个DLL,由于需要,我想用C++代码使用它。,c#,c++,dll,C#,C++,Dll,经过长时间的搜索,我找到了一个解决方案,并使用RegASM.exe从我的abcd.dll文件创建了abcd.tlb 导入此文件后 #import "D:\\..\\abcd.tlb" raw_interfaces_only 当我构建解决方案时,会发生错误 错误C2380:“Accepted_Bills”(返回类型的构造函数,或当前类名的非法重新定义)前面的类型d:…\abcd.tlh 当我搜索这个错误时,我知道一个结构 struct __declspec(uuid("23dbd772-5aa8

经过长时间的搜索,我找到了一个解决方案,并使用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++中不允许使用。我正在使用VisualStudio2010来编译这个


有人能帮我删除这个错误吗。Thanx提前了很多时间

最简单的解决方案是更改接口托管端的声明。更改结构或字段的名称

<>如果你不想这样做,你需要在C++代码中做一些改变。例如:

struct __declspec(uuid("23dbd772-5aa8-3b5a-90a1-b19e4a052166"))
Accepted_Bills
{
    long Denomination;
    __int64 _Accepted_Bills;
};
您需要在每次构建时停止自动生成头文件,并切换到手动生成


在我看来,由于您控制接口的两侧,因此更改C代码是迄今为止最简单的解决方案。

最简单的解决方案是更改接口托管端的声明。更改结构或字段的名称

<>如果你不想这样做,你需要在C++代码中做一些改变。例如:

struct __declspec(uuid("23dbd772-5aa8-3b5a-90a1-b19e4a052166"))
Accepted_Bills
{
    long Denomination;
    __int64 _Accepted_Bills;
};
您需要在每次构建时停止自动生成头文件,并切换到手动生成


在我看来,由于您控制界面的两侧,因此更改C代码是目前为止最简单的解决方案。

您需要接受的票据类型吗



尝试使用其他导入选项,例如
高方法\u前缀(“前缀”)
自动重命名
重命名(…)
是否需要已接受的\u票据类型



尝试其他导入选项,例如
high\u method\u prefix(“prefix”)
auto\u rename
rename(…)

Thanx David!!但这是导入“abcd.tlb”时在.tlh文件中自动生成的结构。我无法更改变量的名称,因为每次运行解决方案时编译器都会生成.tlh文件。然后您必须停止自动生成该文件。请帮助如何停止该操作。我已经试着用这种方法找到解决办法了。但是现在还找不到。请停止使用
#导入
,而是在生成的头文件上使用#include。Thanx David!!但这是导入“abcd.tlb”时在.tlh文件中自动生成的结构。我无法更改变量的名称,因为每次运行解决方案时编译器都会生成.tlh文件。然后您必须停止自动生成该文件。请帮助如何停止该操作。我已经试着用这种方法找到解决办法了。但是现在还找不到。请停止使用
#import
,而是在生成的头文件上使用#include。是的,我需要该结构。请告诉我一些其他的解决方案。是的,我需要那个结构。请告诉我一些其他的解决办法。