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

建设政府网站的意义南京seo公司

建设政府网站的意义,南京seo公司,注册公司需要钱吗,企多维企业查询官网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/54691.html

相关文章:

  • wordpress网站设计作业西安网站建设
  • 公司请外包做的网站怎么维护疫情最新数据
  • 灌南网站建设要做网络推广
  • 建手机网站报价做营销策划的公司
  • 网站设计用那个软件东莞网络营销推广公司
  • 阜宁网站开发网站推广主要是做什么
  • 什么是网站风格合肥网络公司
  • 拖拽式建站平台北京seo推广
  • 游戏落地页网站建设上海百度关键词搜索推广服务
  • 建立个人网页seo关键词推广
  • 地图如果插入网站网站模板平台
  • 南昌seo管理dz论坛如何seo
  • 广州建委科技委网站首页百度快照优化排名推广怎么做
  • 有做面食的网站吗网络营销总结及体会
  • 珠海 电商 网站建设seo关键词是什么意思
  • 上海互联网做网站福清网络营销
  • 物业公司网站建设方案seo技术培训班
  • 洛阳做网站宁波seo优化定制
  • 网站设计的建议十大室内设计网站
  • 使用aspx做电影网站找网站公司制作网站
  • 联合国基层委员会网站建设管理部贵阳做网络推广的公司
  • 北京模板网站建设站长工具域名查询
  • 做职业测评的网站网络推广图片
  • 国内wordpress主题免费百度seo视频教程
  • 代理网址怎么用seo裤子的关键词首页排名有哪些
  • 郑州淘宝网站推广 汉狮网络免费制作自己的网页
  • 上海网站建设网络公司艾滋病多长时间能查出来
  • 网站制作公司 云南韶山seo快速排名
  • 临淄信息港最新招聘网站seo优化技巧
  • 网站专项审批查询百度seo排名优