随笔分类 - C++\CLI
C#调用CLI封装的非托管C++ DLL报错:未能加载由**.dll导入的过程
摘要:今天需要做一个用C#调用CLI封装的标准C++ DLL的DEMO,以前运行的好好的,结果今天就报出了这个错误:未能加载由**.dll导入的过程。本人也是很长时间没有用C#做这种事情了,在排除路径和dll缓存问题之后,想了半天还应该是底层库出了问题,没办法,把所有非托管的C++dll挨个替换成最新的版本,重新编译执行,一切就OK了,看来该整治一下版本混乱的问题了。
阅读全文
C#调用使用C++\CLI封装的标准C++ DLL问题:无法访问受保护的内存,这通常指示其他内存已损坏
摘要:最近需要把使用标准C++开发的dll使用C++\CLI封装,以供C#下调用,各种工作都完成之后,却发现一个很奇怪的问题:无法访问受保护的内存,这通常指示其他内存已损坏。由于C#的程序是个web应用程序,当网站只有单个用户访问或者并发量很低时,没有任何问题,可是当网站并发量稍微一大,立马报错。由于出现问题的模块最终定位在一个依赖的第三方dll,也是使用标准C++编写,后来猜测可能是因为这个dll不支持多线程调用而导致这个问题。后来查看确实是这个问题所导致,没办法,又把C++\CLI封装的库改为控制台程序,使用C#去调用exe文件,但是目前只能通过硬盘来保存中间结果,而无法通过exe来输出二进制流
阅读全文
ASP.NET与非托管DLL的那些事儿
摘要:环境VS2010 语言:ISO C++、C++\CLI和C# 多语言集成编程 最近在用ASP.NET(C#)开发一个WMS服务器的原型,由于标准C++开发的dll无法直接被C#引用,因此采用(类似SWIG自动包装的效果)C++\CLI进行二次封装和桥接(其实这也是SuperMap的套路,与ESRI的COM的确是不样)。现在遇到这样一个问题,首先做个假设:(1)最底层的库是标准C++编写,最终生成的DLL假设叫isocpp.dll,这样的dll也叫做native dll,属于unmanaged(非托管)dll。(2)为了让C#能够调用这个isocpp.dll,我使用C++\CLI对它进行...
阅读全文
异常:System.BadImageFormatException,未能加载正确的程序集XXX
摘要:IDE:VS2010语言:C#异常:System.BadImageFormatException,未能加载正确的程序集XXX或其某一依赖项。。。一般是由于目标程序的目标平台与其某一依赖项的目标编译平台不一致导致,把所有的项目都修改到同一目标平台下(X86、X64或AnyCPU)进行编译,一般即可解决...
阅读全文
浙公网安备 33010602011771号