.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 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);
}

遇到的问题

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使用户调取不到用户环境变量,只能调取到系统环境变量

.net 调用C++ dll的更多相关文章

  1. c# 调用c++DLL方法及注意事项

    引用命名空间 using System.Runtime.InteropServices 调用方法: 一.静态加载 用DllImprot方式来加载c++DLL.如下格式: //对应c++方法 //voi ...

  2. 在.net中调用Delphi dll的Pchar转换

    Pchar是非托管代码,要在.net中调用Delphi dll中的功能,请使用MarshalAs属性告知.net调用PInvoke去转换.net中标准的string类型.如果Delphi dll是De ...

  3. Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()

    Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...

  4. C#调用C++ DLL类方法

    C++的优势在于高效灵活,C#的优势在于简单易用,两者结合起来对项目开发来说是件好事,而且C++不容易反编译,也保障了代码的安全性,如果一些核心算法使用C#编写,那么保密就是一个问题. C++生成的D ...

  5. paip.java 调用c++ dll so总结

    paip.java 调用c++ dll so总结 ///////JNA (这个ms sun 的) 我目前正做着一个相关的项目,说白了JNA就是JNI的替代品,以前用JNI需要编译一层中间库,现在JNA ...

  6. C#调用C++ DLL 文件

    说来惭愧,都注册一年多了,却没有发表过一篇正式的博文,中间很多学习的过程也没有记录下来.如今到了一个新的环境,也有了学习的机会,一定要把每天的收获记录一下. 要做的东西需要引用C++编写的DLL,刚开 ...

  7. LR调用动态链接库DLL

    什么是动态库? 动态库一般又叫动态链接库(DLL),是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库. 动态链接提供了一种方法 ,使进程可以 ...

  8. C#调用C++ Dll

    现在项目基本都是旁边C++的哥们做好dll扔给我,然后我调用.好久之前晚上down了一份c#调用c++dll的方法,出处早已经遗忘.闲来无事,放上来好了.原作者看到后可以留言,我会把您链接放上的,帮了 ...

  9. 【JNI】OPUS压缩与解压的JNI调用(.DLL版本)

    OPUS压缩与解压的JNI调用(.DLL版本) 一.写在开头: 理论上讲,这是我在博客园的第一篇原创的博客,之前也一直想找个地方写点东西,把最近做的一些东西归纳总结下,但是一般工程做完了一高兴就把东西 ...

  10. c#调用c++ dll的几种类型(转)

    http://www.sosuo8.com/article-2012/dllleixingzhuanhuan.htm   在合作开发时,C#时常需要调用C++DLL,当传递参数时时常遇到问题,尤其是传 ...

随机推荐

  1. 网络爬虫入门:你的第一个爬虫项目(requests库)

    0.采用requests库 虽然urllib库应用也很广泛,而且作为Python自带的库无需安装,但是大部分的现在python爬虫都应用requests库来处理复杂的http请求.requests库语 ...

  2. PHP捕获异常register_shutdown_function和error_get_last的使用

    register_shutdown_function 注册一个会在php中止时执行的函数,注册一个 callback ,它会在脚本执行完成或者 exit() 后被调用. error_get_last ...

  3. pyhon代码设计格式指南

    一 缘由: 经常看到周围人写的代码,在大公司有规范,很多人不乱写代码,但是在很多小公司,很多程序员都是半路出家,也不喜欢读书学习,导致写出来的代码乱七八糟.今天拜读了python编程这本书,作者把py ...

  4. 分享Java程序员50多道热门的多线程和并发面试题(答案解析)

    下面是Java程序员相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...

  5. PHP+Mysql统计文件下载次数实例

    PHP+Mysql统计文件下载次数实例,实现的原理也很简单,是通过前台点击链接download.php传参id,来更新点击次数. 获取文件列表: <?php require 'conn.php' ...

  6. .netcore2.1 使用IdentityServer4 生成Token验证

    每个新技术权限验证都有一套机制,之前项目WebApi接口权限验证用的是Owin做为权限验证,而.netcore权限限制使用的是IdentityServer4,采用JWT的方法验证token. 首先使用 ...

  7. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之七:安装前端服务器及部署管理器

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  8. wireshark和tcpdump抓包TCP乱序和重传怎么办?PCAP TCP排序工具分享

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 介绍TCP排序方法,分享一个Windows版的TCP排序工具." 在分析协议的过程中,不可避免地需要抓包. 无论抓包条件如何优越, ...

  9. SQL Server清理数据库日志的脚本-干货

    USE [master]GOALTER DATABASE AAAAAA SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE AAAAAA SET RECO ...

  10. Linux:DNS服务器搭建

    DNS简介 DNS(Domain Name System)域名系统: 是一种采用客户端/服务器机制,负责实现计算机名称与IP地址转换的系统.DNS作为一种重要的网络服务,既是国际互联网工作的基础,同时 ...