在C++项目中调用C#的API

最近在工作中的一个项目,需要使用C#编写的SDK, 而我们项目的代码是C++,如何利用C++调用C#SDK便成了一个问题。经过一番谷歌百度,最终采用CLR实现了C++对C#的调用。具体过程如下图所示
过程图示
假设在C#项目中我们现在有一个API “PrintNameToScreen()”, 我们通过例子一步一步来看如何具体实现。
Step 1. 使用C# 生成dll., 项目名称叫做“DemoHelperLib”;
a. 打开VS2015, 选择Visual C# 的’ClassLibray’选项
在这里插入图片描述
b.项目生成后,配置项目属性, 其中 “Platform target”选择‘x64’, 而Outputpath 则是生成dll的文件夹,最终的大型项目一般要配置到主项目的exe路径下,这个后面会说到。
在这里插入图片描述
c.修改代码内容,VS默认生成的文件名和类名是class1, 为了使用方便,把类名改成DemoHelper,
并添加以下内容


        void PrintNameToScreen(string sName)
        {
   
   
            Console.Write("Hello" + sName);
        }

在这里插入图片描述

编译,在项目路径下的bin文,可以发现’DemoHelperLib.dll’已经生成,step1 到这里就大工告成啦。
Step2.建立C++ CLR 工程,生成library
a. 用VS2015新建一个visaul C++ CLR class library项目,如下图所示,项目名叫“DemoHelpCLRLib”
在这里插入图片描述
b. 打开项目设置,设置‘Use MFC in shared DLL ’在这里插入图片描述
c. 在生成的“DemoHelpCLRLib.h” 头文件中,引入刚才生成的“DemoHelper.dll“的路径,还记得在step1中说的dll生成路径吗? 你可以把该路径直接配置成CLR项目的生成路径,对应本例是“D:\MoFei\Demo\DemoHelpCLRLib\x64\Debug”, 或者手动从bin folder下拷过来,不过不建议这样做,不然每次C#项目有更新,都要重新拷贝一遍,很麻烦的。直接设置好生成路径即可。
在头文件引入

#using "..\x64\Debug\DemoHelpLib.dll"

头文件添加如下代码, 设计一个类‘DemoHelperCLRModule’用来作为管理类,通过gcroot托管对象以实现调用C# API的效果。

// DemoHelpCLRLib.h

#pragma once
#include <afx.h>
#using "..\x64\Debug\DemoHelpLib.dll"

using namespace System;
using namespace System;
using namespace System::Windows;
using namespace System::
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值