google和百度等相关网站的广告词,网站开发公司需要什么资质,100平米简约办公室,站长平台百度托管C与C/CLI前世今生
C/CLI (C/Common Language Infrastructure) 是一种用于编写托管代码的语言扩展#xff0c;它是为了与 .NET Framework 进行互操作而设计的。C/CLI 是 C 的一种方言#xff0c;它引入了一些新的语法和关键字#xff0c;以便更好地支持 .NET 类型和垃圾…托管C与C/CLI前世今生
C/CLI (C/Common Language Infrastructure) 是一种用于编写托管代码的语言扩展它是为了与 .NET Framework 进行互操作而设计的。C/CLI 是 C 的一种方言它引入了一些新的语法和关键字以便更好地支持 .NET 类型和垃圾回收。
托管C (Managed Extensions for C) 是早期的一种用于编写托管代码的语言扩展它也是为了与 .NET Framework 进行互操作而设计的。托管C 是 C 的一种扩展但它的语法和使用方式相对复杂和不直观。
以下是 C/CLI 和托管C 的一些主要区别 语法和关键字 C/CLI 引入了新的语法和关键字如 ref class、^ (句柄) 和 gcnew 使得编写托管代码更加直观和简洁。 托管C 使用 __gc、__value 等前缀来标识托管类型语法相对复杂。 类型系统 C/CLI 更好地集成了 .NET 类型系统支持泛型、委托和事件等特性。 托管C 对 .NET 类型系统的支持较为有限使用起来不如 C/CLI 方便。 性能和优化 C/CLI 在性能和优化方面进行了改进生成的代码更高效。 托管C 的性能相对较差生成的代码效率不如 C/CLI。 兼容性和支持 C/CLI 是当前主流的用于编写托管代码的 C 扩展得到了更好的支持和维护。 托管C 已经被弃用不再推荐使用。
参考文献 Managed Extensions for C C/CLI
代码示例
C部分
//.h
#ifndef HEADER_H
#define HEADER_H#include stdio.h
#include stdlib.h
#include iostreamusing namespace std;#ifdef MYCLASS_EXPORTS
#define MYCLASS_EXPORTS __declspec(dllexport)
#else
#define MYCLASS_EXPORTS __declspec(dllimport)
#endifextern C MYCLASS_EXPORTS int Add(int numberA, int numberB);class MyClass
{public:MyClass();~MyClass();};#endif // !HEADER_H//c.pp
#include header.hMyClass::MyClass()
{
}MyClass::~MyClass()
{
}MYCLASS_EXPORTS int Add(int numberA, int numberB)
{// 计算两个数的和int result numberA numberB;// 返回结果return result;
}1.设置预处理器
2.输出dll
CLR部分
//.h
#ifndef HEADER_H
#define HEADER_H#include iostream
#include ../MyDll/header.h//引用库声明对应文件路径public ref class MyClrClass
{
public:MyClrClass();int AddCode(int numberA, int numberB);
};#endif // !HEADER_H//.cpp
#include header.hMyClrClass::MyClrClass()
{
}int MyClrClass::AddCode(int numberA, int numberB)
{return Add(numberA, numberB);
}1.修改公共语言运行时支持 2.设置语言符合模式
3.引用前面c部分 4.输出目标dll
C#调用部分
var a 10;
var b 20;
var invoke new MyClrClass();
var addResult invoke.AddCode(a, b);
Console.WriteLine($Add result is {addResult});添加CLR dll
输出结果