T3d*_*b0t 15 windows dll c++-cli visual-c++
我在托管DLL项目中有一个头文件,如下所示:
Enums.h:
#pragma once
...
public ref struct ManagedStruct {
Bitmap^ image;
}
...
Run Code Online (Sandbox Code Playgroud)
此标头既可以从DLL中的另一个类引用,也可以从单独的可执行文件引用.仅托管结构生成:
错误C2011:'ManagedStruct':'class'类型重定义.
如果我将结构移动到DLL中的主头文件它可以正常工作,并且是公共可访问的,所以这就是我正在做的事情,但我非常想知道为什么当我将它移动到另一个文件时发生这种情况.
我检查了所有必要的包含和名称空间并尝试了明显的标题保护,但无济于事; 我仍然得到错误.
非常感谢您的任何见解!
Han*_*ant 33
在使用托管代码时,您必须重新调整传统的C/C++头文件.类型声明的主要来源是程序集元数据.这与本机C/C++编译模型非常不同,在本机C/C++编译模型中,您必须具有可用于其他模块的类型的头文件.
我猜你在EXE项目中得到了这个C2011错误.你们都添加了对DLL项目程序集的引用(就像你应该这样),并在头文件中使用了#include.就像你不应该.这是一个有保证的重复定义,#pragma曾经不能解决这个问题.
不要将头文件用于导出的类型定义.始终使用装配参考.
| 归档时间: |
|
| 查看次数: |
5918 次 |
| 最近记录: |