vue 调用c++_.net 调用C++ dll

这篇博客介绍了如何使用.NET C#调用C++ DLL,包括加载DLL和调用方法的步骤。在过程中遇到的问题如无法加载DLL、Web应用程序中的StackOverflowException错误以及IIS部署后的环境变量问题,博主提供了相应的解决方案,如检查依赖项、使用控制台代理或修改环境变量设置。
摘要由CSDN通过智能技术生成

.net C#调用C++ dll 主要分为以下的步骤

1、加载dll

[DllImport("CallOtherLanguage.dll", EntryPoint = "create_prg", CharSet = CharSet.Unicode, CallingConvention =CallingConvention.Cdecl)]private static extern int create_prg(byte[] first_num, byte[] second_num);

2、调用dll

public voidCallOther()

{string first = "this is a";byte[] byteFirst =Encoding.UTF8.GetBytes(first);string second = "other";byte[] byteSecond =Encoding.UTF8.GetBytes(second);int result =create_prg(byteFirst, byteSecond);

Console.WriteLine(result);

}

遇到的问题

1、调用dll时报:无法加载*.dll,找不到指定的模块

这个主要有以下两个原因

a、是因为对应的dll中有依赖于别的dll,用【depends】这个程式打开dll看有哪些依赖dll没有于当前dll放到同一个目录下,下载指定的dll到当前目录下即可

b、dll依赖的dll所在的路径没有放到环境变量中,把依赖dll放到环境变量中此错误就会解决

2、控制台程序和winform程序调用dll都能够正确返回内容,便是webform或webservice调用dll就会报错:未处理System.StackOverflowException

这个目前了解到的原因是控制台程序和winform中单线程调用,而webform或webservice是多线程调用,可能是这方面出现的问题,以下是两个临时解决方案

1、写一个控制台程序调用dll,然后weborm调用这个控制台程序获得返回结果

2、把webform的请求写入数据库或队列中,然后写一个服务自动去轮询数据库或队列进行处理

2、vs调试时调用正常,便是发布到IIS后调用失败,说找不到指定的模块:无法加载*.dll,找不到指定的模块

这个问题主要是因为调用的dll所依赖的dll所在路径配置的环境变量是用户环境变量而不是系统环境变理,把环境变量配置到系统环境变量后问题解决

原因是IIS使用户调取不到用户环境变量,只能调取到系统环境变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值