当前位置: 首页 > news >正文

外贸专用网站贵阳网络推广排名

外贸专用网站,贵阳网络推广排名,深圳罗湖企业网站推广,源代码网站开发C/CLI——1简介 如果你是.net程序员,不免会用到C/C写的库。对于简单的调用,可以直接使用DllImport来完成就可以,详情可参考C#调用C/C从零深入讲解。但是对于复杂的C类和对象,尤其是类似于OCC的大型C项目,DllImport可能…

C++/CLI——1简介

如果你是.net程序员,不免会用到C++/C写的库。对于简单的调用,可以直接使用DllImport来完成就可以,详情可参考C#调用C/C++从零深入讲解。但是对于复杂的C++类和对象,尤其是类似于OCC的大型C++项目,DllImport可能不够方便,这就要引出C++/CLI方式来实现C#与C++/C库的交互。C++/CLI常用的5中场景有:

  • 在.net中静态调用WindowApi或者DLL。

通常可经过 DllImport 属性包装出函数来调用

  • 用托管C++包装现有的DLL,供C#调用

托管C++代码可以直接引用原有的头文件,直接调用非托管函数,而不需要声明。这样,既减少了工作量,又避免引入错误。缺点是,这种方法会增加一个DLL。要注意的是托管字符串和非托管字符串是有区别的,并需要转换(特别要注意的Unicode字符串和多字节字符串的转换)。

  • 现有C++源代码,包装后供C#调用

C++的源代码,实际上可以直接编译成托管代码

  • 在托管C++代码中混合托管和非托管代码

只要从#pragma unmanaged编译指示开始的程序,一率编译成非托管代码;要想恢复成托管代码,只要使用#pragma managed就可以了

  • 不要DLL,直接把C++源代码与C#源代码一起编译成一个单独的Assembly

声明类

ref class Animal
{
public:int legs;void SetName(String^ name){this->name = name;}String^ GetName(){return name;}
private:String^ name;
};
  • 声明类时,加上了ref关键字,该类就变成了托管类,是可以被gc来管理的。加上了ref的类被称为引用类型,这是由于变量不实际包含对象,而是包含指向对象内存位置的指针,也可以称之为句柄,引用对象必须分配在堆上。
  • 可以使用value关键字来声明类,此时该类便是值类型,直接分配在栈上,变量本身包含对象本身。
#include "pch.h"
using namespace System;ref class AnimalRef
{
public:int legs;void SetName(String^ name){this->name = name;}String^ GetName(){return name;}
private:String^ name;};value class AnimalValue
{
public:int legs;void SetName(String^ name){this->name = name;}String^ GetName(){return name;}
private:String^ name;};int main(array<System::String^>^ args)
{AnimalRef cat;cat.SetName("mm");cat.legs = 4;Console::Write("cat:");Console::WriteLine(cat.GetName());AnimalValue dog;dog.SetName("xx");dog.legs = 4;Console::Write("dog:");Console::WriteLine(dog.GetName());Console::WriteLine(sizeof(dog));return 0;
}

image-20231226153746977

基本数据类型

类型说明
bool
char,__int8单字节,一般用于容纳ASCII
short,__int16整数
int,__int32整数
long整数,许多编译器中是int的两倍
long long ,__int64整数
float浮点
double双精度
wchar_t宽字符或多字符

在标准C++中,基本数据类的大小是不固定的,如int可能是4字节,也可能是8,或者其他,这是根据运行平台来决定的,但是在c++/cli中基本数据类型的大小是固定的。

句柄和指针

在标准C++中,指针容纳的是一个变量的内存地址,通过指针可以间接引用变量,但是C++/cli中,运行时会管理内存,所以它会将内存的东西一来一去以最大化的利用内容空间,这就意味着对象不会总在一个位置待着,这时候,指针的地址会过期。所以C++/CLI中没有指针的概念而是使用句柄来包含变量的地址,运行时会自动更新这个地址。

声明句柄的方式就是在变量名前面加上^符号,而且一般使用gcnew操作符号来创建对象并获取它的句柄。

int main(array<System::String^>^ args)
{AnimalValue^ cat = gcnew AnimalValue();cat->legs = 4;cat->SetName("mm");Console::WriteLine(cat->GetName());array<int>^ arr = gcnew array<int>(10);arr[0] = 12;Console::WriteLine(arr[0]);return 0;
}

强制类型转换

可以使用以下几种方式进行类型转换:

  1. (),例如:(float)7
  2. static_cast<>:常用
  3. const_cast<>:配合指针使用,添加或删除变量的常量限定
  4. dynamic_cast<>:在继承层次中使用
  5. safe_cast<>:类似于dynamic_cast<>,转换失败会报异常
  6. reinterpret_cast<>:将指针转换成其他类型指针

尖括号中是目标类型

int a = 10;
double b;
b = static_cast<double>(a);
http://www.khdw.cn/news/56808.html

相关文章:

  • 做网站选哪家好一键优化软件
  • 国外做网站被动收入提交百度一下
  • 服装网站网络建设和硬件资源cms系统
  • 海外学校网站建设品牌推广策划方案怎么写
  • 龙岗做网站哪里找惠州seo收费
  • 温州网站建设哪家好网站怎么进入
  • 购物网站开发案例教程品牌公关案例
  • 网站滑动效果怎么做的今日特大新闻
  • 企业为什么做网站广州网络优化最早的公司
  • 怎么用电脑做网站服务器吗百度文库官网首页
  • 厦门英文网站建设合肥网络推广
  • jspajax网站开发典型实例宁波网站建设方案推广
  • 北京自助企业建站模板推广产品引流的最佳方法
  • 什么是建设网站的主题免费发布平台
  • 磁力网站怎么做的源码百度招聘网最新招聘信息
  • 义乌小商品市场网seo顾问是什么
  • 上海免费网站建站模板松松软文
  • python建设购物网站上海疫情最新情况
  • 简单的做图网站百度seo一本通
  • 网站建设加工天津天狮网络营销课程
  • wordpress商业模板个人正规seo排名外包
  • 网站广告用ps如何做小程序定制开发
  • 河北做网站哪家公司好超级外链吧外链代发
  • 百度网站的设计风格如何进行关键词优化工作
  • 网站百度排名怎么做快今天发生的重大新闻5条
  • 做易经网站长尾关键词挖掘工具
  • 合肥建设银行官网招聘网站网站推广计划方法
  • 国内优秀网站欣赏seo专员是什么
  • 重庆泡沫字制作seo课程培训入门
  • 福建省住房和城乡建设局网站公司网站建设服务