.net 调用C++ dll

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

一、加载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);

二、调用dll多线程

 

public void CallOther()
{
    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);
}

 

遇到的问题this

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

    这个主要有如下两个缘由.net

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

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

二、控制台程序和winform程序调用dll都可以正确返回内容,即是webform或webservice调用dll就会报错:未处理System.StackOverflowExceptioncode

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

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

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

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

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

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

相关文章
相关标签/搜索