在ASP.NET中调用 非托管的C++ DLL文件(通过C++\CLI桥接)

今天打算给一个OC项目写个简单的Web API,顺便了解如何利用 C++\CLIL来桥接C++ 与C#,本以为用VS2017一路生成就可以了,哪知道掉了个坑,在这里记录一下:

目标: myDll.dll (c++) --> myDll_Cli.dll(c\cli) --> web api(c#) 完成图如下:
在ASP.NET中调用 非托管的C++ DLL文件(通过C++\CLI桥接)_第1张图片
1.gif
1、新建web api 、添加mydll (c++)以及 mydllCil 三个项目,这里需要注意平台选择x86;
2、配置mydllCi项目:

1.设置项目属性 ->【VC++目录】->【包含目录】和【库目录】为 myDll(c++) 目录;

在ASP.NET中调用 非托管的C++ DLL文件(通过C++\CLI桥接)_第2张图片
2.jpg
  1. 设置项目属性 ->【链接器】->【延迟加载的DLL】为myDll.dll(C++项目即将生成的项目)


    在ASP.NET中调用 非托管的C++ DLL文件(通过C++\CLI桥接)_第3张图片
    3.jpg
3、配置webapi项目

1)设置项目属性 ->【生成事件】 -> 【后期生成事件命令行】为如下:

copy  $(SolutionDir)$(ConfigurationName)\MYDLL.dll $(ProjectDir)$(OutDir)

这里就是dos命令,具体可以百度命令行 指令


在ASP.NET中调用 非托管的C++ DLL文件(通过C++\CLI桥接)_第4张图片
4.jpg

2)添加代码 到 Global.asax 文件:

            String _path = String.Concat(System.Environment.GetEnvironmentVariable("PATH"), ";", System.AppDomain.CurrentDomain.RelativeSearchPath);
            System.Environment.SetEnvironmentVariable("PATH", _path, EnvironmentVariableTarget.Process);
在ASP.NET中调用 非托管的C++ DLL文件(通过C++\CLI桥接)_第5张图片
5.jpg

这是大坑,为啥要添加直接给出网址:ASP.NET与非托管DLL的那些事儿

你可能感兴趣的