2019独角兽企业重金招聘Python工程师标准>>>

这个错误看上去好像是 C++ DLL库本身的问题,其实并不尽然。由于使用了混合模式编译托管 DLL ,所以该 DLL 又会用到非托管的 CRT ( C Run-Time )库。如果机器上没有安装这些被使用到的运行时组件,就会产生类似 HRESULT: 0x8007 的错误。

要注意的是,如果你编译 C++ 托管程序集的时候使用的是 Debug 配置的话,生成的 DLL 需要调用的就是 CRT 对应的 debug 版本( msvcr80d.dll 及 msvcm80d.dll 等 )而不是(msvcm80.dll及 msvcp80.dll等)。了解生成的 DLL 到底是 Debug 还是 Release 版本最简单的方法是用文本编辑器打开该 DLL 文件,找到以下类似的内容(一般位于文件末尾处):

<assembly xmlns="urn:schemas-microsoft-com:asm.v1"

  1. manifestVersion="1.0">
  2. <dependency>
  3. <dependentAssembly>
  4. <assemblyIdentity type="win32"
  5. name="Microsoft.VC80.DebugCRT"
  6. version="8.0.50608.0"
  7. processorArchitecture="x86"
  8. publicKeyToken="1fc8b3b9a1e18e3b">
  9. </assemblyIdentity>
  10. </dependentAssembly>
  11. </dependency>
  12. </assembly>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1"manifestVersion="1.0"><dependency><dependentAssembly><assemblyIdentity type="win32"name="Microsoft.VC80.DebugCRT"version="8.0.50608.0"processorArchitecture="x86"publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity></dependentAssembly></dependency></assembly>

如果看到 Microsoft.VC80.DebugCRT ,那说明该 dll Link的目标是 CRT的Debug版本,如果是Microsoft.VC80.CRT 则 link 到再分发版本。当我在 VS.net2005 的 IDE 中通过批生成来生成 C# exe 和 C++ dll 的时候,如果当前的活动解决方案配置是 Debug 的话,在 C# 项目的Release输出目录下拷贝的会是 C++ dll 的 Debug 版本文件而不是 Release 版本!所以在发布生成之后确认对应文件的版本还是相当有必要的。

下面是两种模式需要的文件及目录位置,根据模式将相应的文件拷入安装目录即可解决上述问题

状态 : Debug Mode

\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86

|
          -> \Microsoft.VC80.DebugCRT
               |
               -> Microsoft.VC80.DebugCRT.manifest, msvcm80d.dll, msvcp80d.dll, msvcr80d.dll
  状态 : Relsase Mode
     
     \Microsoft Visual Studio 8\VC\redist\x86
         
          |
          -> \Microsoft.VC80.CRT
               |
               -> Microsoft.VC80.CRT.manifest, msvcm80.dll, msvcp80.dll, msvcr80.dll

如何生成Release 版本:

将运行按钮右边的解决方案配置改为Release模式,然后生成即可

转载于:https://my.oschina.net/duluo180/blog/29730

C#调C++生成的dll报0x800736B1错误相关推荐

  1. python 调c++生成的dll 中识别char *_基于tensorflow 实现端到端的OCR:二代身份证号识别...

    最近在研究OCR识别相关的东西,最终目标是能识别身份证上的所有中文汉字+数字,不过本文先设定一个小目标,先识别定长为18的身份证号,当然本文的思路也是可以复用来识别定长的验证码识别的. 本文实现思路主 ...

  2. 【Unity导入MySql.Data.dll报错】

    Unity导入MySql.Data.dll报错 错误的起因,想用Unity对MySQL操作.操作参考了勤诚勇毅的帖子 链接: https://blog.csdn.net/qq_43333567/art ...

  3. Clion生成动态链接库.dll

    今天研究如何生成动态链接库.dll文件纠结了好久.在保证代码文件不报错的情况下,可能要注意几个方面. 一·项目结构要完整. Clion项目生成后会和其他编程工具不同的地方在于会有一个CMakelist ...

  4. 全网唯一C++调用由com组件生成的dll教程

    首先是一般的dll调用 可以参考这个博文https://blog.csdn.net/Giser_D/article/details/89677441 一般的dll结构如下(放在depends.exe软 ...

  5. dll = MinGW gcc 生成动态链接库 dll 的一些问题汇总

    MinGW gcc 生成动态链接库 dll 的一些问题汇总 https://blog.csdn.net/liyuanbhu/article/details/42612365 网络上关于用 MinGW  ...

  6. Delphi 调用VC生成的DLL

    1. 在VC中新建一个 DLL 工程. 写如代码,如: extern "C" {   _declspec(dllexport) int getPPLength();   _decl ...

  7. python调用dll报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong call

    python调用dll报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong call ...

  8. c# 传递Null的string值导致的调用C++的dll报错 Attempted to read or write protected memory.

    c# 调用C++的dll报错 Attempted to read or write protected memory: 原因是:c# 传递Null的string值导致的,将Null改为string.e ...

  9. c#重命名文件 - 抛弃MoveTo,而引用vc 中rename生成rename.dll

    1:vc6中新建win32 简单动态链接库 2:添加Rename.cpp文件,如下: #include <string> #include <stdlib.h> using n ...

最新文章

  1. python中的format什么意思中文-Python中format()格式输出全解
  2. Ural_1353. Milliard Vasya's Function(DP)
  3. java开发遇到最大的问题_java开发遇到的问题总结(三)
  4. flex 常用正则验证举例
  5. leecode第三十题(串联所有单词的子串)
  6. 编码器rtsp规则-各厂商
  7. oracle mrp mps mds 的table关联,ORACLE中的计划-Forecast/MDS/MPS/MRP(转)
  8. linux 显示ip地址小工具-nali
  9. 网吧上网小心绝地求生账号被盗
  10. Python 课程学习笔记(5)列表 [ ] lst
  11. 论文专利博客写作总结
  12. APP 微信支付java后台代码(解决支付失败返回-1)
  13. 物联网的通信技术以及Wi-Fi、一键配网技术、BLE、GPRS(2G)、LTE-Cat1 、NB-IoT简介
  14. Sql 实现数据透视表功能
  15. UPC 1016: 幼儿园小朋友们的难题
  16. iframe 边框去除,使用大全
  17. Pandas数据类型自行变换及数据类型转换失败情况分析与解决方法
  18. 全志H6 Android7.0 OTA 相关
  19. nginx使用80端口
  20. 关于如何卸载IE11恢复IE8

热门文章

  1. ROS最正确的限速--------小包优先+带宽均分+简单队列限制上传速度
  2. matlab 的均值t检验,用MATLAB做T检验(ttest)
  3. pod实例数是什么意思_[灌水] Kubernetes In Action: Pod
  4. qt非thread使用sleep_.NET进阶篇06-async异步、thread多线程3
  5. MySQL高级 大批量插入数据
  6. MySQL高级 - 存储引擎 - 概述
  7. 发送消息时,设定TTL
  8. Quartz Java编程
  9. maven项目的一键构建
  10. 模版设计模式概述和使用