c ++/cli接口头文件

Mic*_*ble 7 clr c++-cli header

我有一个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();
};
Run Code Online (Sandbox Code Playgroud)

TEST.CPP

#include "Test.h"

int Test::Foo()
{
    return 4;
}
Run Code Online (Sandbox Code Playgroud)

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).   
Run Code Online (Sandbox Code Playgroud)

我绝对没有其他地方的重复类"测试",所以我不知道副本来自何处.什么是typelayout信息,为什么它们不一致?

Ben*_*igt 0

也许您正在寻找

#if __cplusplus_cli
Run Code Online (Sandbox Code Playgroud)

MSDN 上有记录