C++和C#混合编程
最近需要利用C++和C#混合编程,然后就写了一个C#调用C++生成的DLL的DEMO。困扰我好久的就是C#中string类型在C++里面怎么表达,现在把C++生成DLL供C#调用的流程写出来。
源码:百度网盘
环境:win7+vs2010。
1、打开VS创建C++项目"C++_CScharp_DLL"
点击确定之后接着点击下一步:
然后选择应用程序和附加选项:
点击完成,C++的项目就新建好了。
2、添加代码文件
右键项目,添加类,如下图所示:
添加类之后会打开添加文件对话框,点击添加即可,如下图所示:
点击确定之后进去下一个对话框,填写文件名Function,如下图所示:
添加好后会生成h文件和cpp文件,如下图所示:
Function.h文件代码如下:
#pragma once #include <string> public ref class Function { public: Function(void); ~Function(void); int menber; int menberFuncAdd(int a,int b); System::String^ say(System::String^ str); };
Function.cpp文件代码如下:
#include "Function.h" Function::Function(void) { } Function::~Function(void) { } int Function::menberFuncAdd(int a,int b) { return a+b; } System::String^ Function::say(System::String^ str) { return str; }
填写完后Function.h文件会报错,错误类型如下:
这里需要在C++项目里面设置,让动态库受到公共语言运行时的支持。如下图所示:
打开项目属性
修改完成后点击项目右键生成DLL,看是否报错,成功结果如下图:
3、添加测试程序:
在该解决方案中添加测试程序:
添加一个C#控制台测试程序:
添加完后设为启动项:
添加引用:
将C++项目添加到C#的项目中:
4、编写测试代码
Program.cs文件代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { class Program { static void Main(string[] args) { Function fun = new Function(); Console.WriteLine(fun.menberFuncAdd(1, 2)); Console.WriteLine(fun.say("Hello World")); Console.ReadKey(); } } }
现在就可以点击调试按钮调试了,调试结果如图所示:
异常情况:
运行的时候若出现未处理的异常导致dll加载失败,需要修改项目到对应的平台
修改方法如下:
源码:百度网盘
posted on 2016-09-14 15:56 Geography爱好者 阅读(18278) 评论(2) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具