【托管C++(CLI)】【简单示例】C#调用C++/CLI(以DLL形式调用)

2024/1/1更新

变质胶水不建议用(容易出现跨IDE不兼容),写点C式dll不香吗。
参考别的方式调用dll:C#调用DLL的几种方法,包括C#调用C\C++\C#DLL

旧内容已过时

下面的东西不用看了,看了浪费时间。(不想改单纯是因为已经打算不用CSDN了,因此文章内容不再维护





【本文章发布于CSDN,未经个人同意不得转载】

【原文地址:【托管C++(CLI)】【简单示例】C#调用C++/CLI(以DLL形式调用)






因为操作太多了,纯文本描述实在是不方便,直接来个图文说明

①、【一个平淡无奇的C++空项目】


②、【设置该C++项目的项目属性】
“符合模式”这个东西我也不知道是干啥的,但我也不怎么感兴趣,翻车的时候再来看看好了


③、【写一个C++的托管类(CLI),调用之前写的C++类,然后生成DLL文件】
简单说明下这个CLI的语法:
①、托管类要用ref声明,并且添加public声明用于外部项目的使用;
②、托管类里头的公有部分的复杂数据类型统统都是C#的数据类型例如System::Collections::Generic::List啥的(当然也可以是自己写的其他的托管类),并且那些数据类型都必须使用引用^;
③、在cpp文件里生成个C#的数据对象是使用gcnew的而不是new的;
④、C++的类/数据结构是不能出现在公有部分中的(你写了就直接给你报错),但可以出现在私有部分中。
更多关于CLI语法上的细节请自行搜索查看其它人的文章博客。


④、【添加一个CS项目去调用这个DLL文件】



【其他】
那时我可是被那“CLI 字典 数组 列表”啥的给整恶心了啊,搜需要的数据类型但啥也搜不到(姿势不对?)。然后不知道怎么的我打开了“对象浏览器”于是走进新大陆。(其实CLI的数据类型说白了就是C#的数据类型只是当时蠢没有意识到








不想一个个文件复制黏贴的话可以直接在GitHub里下载项目,传送门:【GitHub/CLI_Demo】

【Record.h】

//【Record.h】
#pragma once
#ifndef  RECORD_H
#define RECORD_H

#include<vector>
#include<map>
#include<string>

//C++的原生类,生成库之后该类并不会出现在在C#项目中
class Record {
   
private:
	std::map<char,std::vector<std::string>>mapping;
public:
	void AddString(std::string str);//加入字符串,以首字符为索引存进mapping中
	std::vector<std::string>GetString(char ch);//根据索引获取字串列表
	std::map<char, std::vector<std::string>>GetMapping();//获取mapping
};

#endif // ! RECORD_H

【Record.cpp】

//【Record.cpp】
#include"Record.h"

void Record::AddString(std::string str){
   
	mapping[str
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值