你看过 C++/CLI 吗?
让我举一个非常简短的例子。这是来自 Visual C++ -> CLR -> 类库项目的源文件。它基本上是获取 Windows 用户名并返回它。
请注意,为了编译它,您必须进入项目设置并将“附加依赖项”标记为“从父级继承”,因为我们正在使用这些 Windows 库(kernel32.lib、user32.lib、..)
// CSCPP.h
#pragma once
#include "windows.h"
using namespace System;
namespace CSCPP {
public ref class Class1
{
// TODO: Add your methods for this class here.
public:
String^ GetText(){
WCHAR acUserName[100];
DWORD nUserName = sizeof(acUserName);
if (GetUserName(acUserName, &nUserName)) {
String^ name = gcnew String(acUserName);
return String::Format("Hello {0} !", name);
}else{
return gcnew String("Error!");
}
}
};
}
现在创建了一个新的 C# 项目并添加对我们的第一个 C++/CLI 类库项目的引用。然后调用实例方法。
namespace CSTester
{
class Program
{
static void Main(string[] args)
{
CSCPP.Class1 instance = new CSCPP.Class1();
Console.WriteLine(instance.GetText());
}
}
}
这在我的机器上给出了以下结果:
你好 m3rlinez !
C++/CLI 基本上是基于 C++ 标准的托管扩展。它允许您在 C++/CLI 项目中使用 CLR 类和数据类型,并将其公开给托管语言。您可以使用它为您的旧 C++ 库创建一个托管包装器。有一些奇怪的语法,例如String^
定义 CLR 字符串的引用类型。我发现“Quick C++/CLI - Learn C++/CLI in less than 10 minutes”在这里很有用。