c ++ / cli接口头文件
我有一个C ++项目(Visual Studio 2010),它也由本地代码和c ++ / cli代码组成。 我不能用/ clr编译整个项目,所以我只是为了各自的c ++ / cli文件而做。 我的问题是头文件不能用/ clr编译,但是我想在整个项目中重新使用一些c ++ / cli函数,因此在头文件中定义方法原型以将其包含在每个需要它的文件中。 有解决方案吗? 我试图在头文件中定义一些混合代码方法原型,但必须打开/ clr才能编译。
这是我的例子:
Test.h
#include <Windows.h>
#include <vector>
#include <string>
using std::vector;
using std::string;
#include <msclr/marshal.h>
#pragma managed
using namespace msclr::interop;
using namespace System;
using namespace System::IO;
using namespace System::Runtime::InteropServices;
public ref class Test
{
public:
int Foo();
};
TEST.CPP
#include "Test.h"
int Test::Foo()
{
return 4;
}
Intellisense在Test.h中抱怨错误,就像c ++ / cli必须启用#using一样。 但我认为这是微不足道的,它会编译。
编译中止与链接器错误(sry,我有德国VS版本)
Fehler 6 error LNK1255: Fehler bei Verknüpfung aufgrund von Metadatenfehlern.
Fehler 4 error LNK2022: Fehler bei Metadatenoperation (8013118D) : Duplizierte Typen (_PROPSHEETPAGEA) wurden gefunden, aber die Typenlayoutinformationen sind nicht konsistent: (0x02000198).
Fehler 5 error LNK2022: Fehler bei Metadatenoperation (8013118D) : Duplizierte Typen (_PROPSHEETPAGEW) wurden gefunden, aber die Typenlayoutinformationen sind nicht konsistent: (0x020001d1).
我绝对没有重复的类“测试”在别处,所以我不知道重复来自何处。 什么是布局信息以及它们为什么不一致?
我想你们都错过了这一点。
您可以使用某些/ clr类轻松编译本机项目。 (例如:本地DLL仍然可以像本地DLL那样工作,但是它也可以加载到C#中,然后可以在C#中访问/ clr编译类。)
这就是为什么这样的选项存在于文件级别。 (右键单击.cpp:属性 - > C C ++ - >公共语言运行时支持 - / clr)
问题是:
在本地托管类之间进行通信,因为.H文件不能设置为使用/ clr,所以不能用于在其他位置引用托管类,包括同一项目中的其他/ clr文件。 (也就是说,你可以创建/ clr文件,但是它们不能相互交流,也不能在项目的本地部分引用它们。)
我能找到的最佳解决方案是创建一个“胶水”C#.dll文件。
创建一个新的C#类库,添加Native DLL作为引用,然后编译。
现在,在您的本地项目中,您可以加载C#DLL,并通过它访问natives / clr内容。 (您以这种方式引用的托管代码可以用于本机托管代码。)
这很有可能,但是,我找不到一个简单的方法来完成这个任务。
这就是主题所在,似乎没有办法引用/ clr类,因为在文件级设置/ clr时头文件不起作用。 (例如,除非整体项目设置为/ clr,否则标题不能包含/ clr代码。)
必须有一种方法可以在不使用头文件的情况下引用/ clr内容,或者C ++ CLI只是中断了,我可以使用pragma +头文件轻松地将本地代码加载到/ clr文件中,但是,相反,在我的“胶水”解。
这是我相信这个话题是关于。
我的方法是有效的,但是,要正确使用它非常棘手,而且由于循环依赖等原因,编译是一个痛苦。
我真的希望有一个正确的方法来做到这一点,我一直在寻找,我的搜索引导我在这里...
真正的解决方案是使.h文件支持/ clr,然后你可以在头文件中定义你的托管类,并且可以使用标准方法自由地引用它,如include using pragma等。
也许你在寻找
#if __cplusplus_cli
在MSDN上记录此处
链接地址: http://www.djcxy.com/p/10227.html