【发布时间】:2015-06-25 07:09:21
【问题描述】:
我正在为我的 C# 项目开发一个 c++ 包装器。 我对最终结果的编译方式有点困惑。所以我有这种情况:
一个项目的解决方案。该项目具有公共语言运行时支持 (/clr)。本机 cpp 文件配置为没有公共语言运行时支持 (/clr) 并且没有预编译头文件。
所以我的问题是:
- 为什么我必须对原生 cpp 文件使用 NO 预编译头文件?
- 最终结果是什么,本机代码是否编译为机器码?还是因为我使用 .Net 的包装器,所以它是 JIT?
本机标头:
#pragma once
#include <string>
using namespace std;
class Person
{
private:
string _name;
public:
Person(string name);
~Person();
string GetName();
};
本机 cpp:
#include "stdafx.h"
#include "Person.h"
Person::Person(string name)
{
_name = name;
}
Person::~Person()
{
}
string Person::GetName()
{
return _name;
}
C++ 包装头
#pragma once
#include <msclr\marshal_cppstd.h>
#pragma unmanaged
#include "Person.h"
using namespace System;
using namespace msclr::interop;
namespace WrapperLib{
public ref class PersonManaged
{
private:
Person *_person;
public:
PersonManaged(String ^name){
_person= new Person(marshal_as<std::string>(name));
}
~PersonManaged()
{
delete _person;
_person = 0;
}
String ^Getname(){
return gcnew String(_person->GetName().c_str());
}
};
}
编辑:
感谢滦安的回答!这有帮助!我下载了 ILSpy 并打开了混合程序集。我还在那里找到了我的本地 Person 类。
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[NativeCppClass, UnsafeValueType]
[StructLayout(LayoutKind.Sequential, Size = 24)]
internal struct Person
{
}
现在它是什么样的? .Net 有 System 和 System.Runtime 之类的用法,但也有 NativeCppClass 的属性?
【问题讨论】:
-
请留下评论以投反对票,这样下次我知道出了什么问题...
标签: c++ .net visual-studio