第三方引用库使用方式有两种1.动态库(DLL),2.静态库(Lib)

区别:

静态库:我们的程序在链接时会把用到的静态库全部都链接进去,形成一个exe,这也导致我们的exe很大(程序是先编译,再链接库,最后形成exe)

动态库:是在不再把整个库都链接进去,而是程序用到哪个库,再加载哪个库,这就降低了exe的大小,但同时,运行速度也会变慢。当然,用动态库的话你的系统也需要有这些动态库(这里有坑),因为程序是没有的,所以啊,其实exe还是那么大,但是我们把exe的东西拿出来了,才降低了exe的大小。

DLL编译的时候需要指定系统版本x64或者x86,所以在接入dll的时候需要明确产品定位,具体接入那个版本库,x86系统不支持x64软件,x64可以运行x86(好像有性能损耗)。

接入C#项目的调用这里就不记录了,网上资料挺多,这里主要记录一下编译的问题:

我们编译项目解决平台绝大部分都是Any CPU,可能很少有人注意这里的区别,首先Any CPU 编译时默认首选32位!!

此时如果引入x64的DLL,就会无法编译通过,一些人可能会想到引入的x64DLL从而把平台改为x64,这里我不建议这么操作(产品打包安装程序可能会出现问题),只需要取消勾选首选32位就可以解决编译问题

  解决编译问题,功能完成就该转交测试了,因为我们项目是桌面程序,所以需要打包成安装程序,这里我使用的是vs自带的打包工具

打包程序需要设置安装平台

我这里都以x64为例,如果选择解决方案平台选择Any CPU 那么打包时就不支持Itanium平台

这里需要注意一点,最开始提到了,动态库是使用的时候才会调用对应的DLL,这就要求一点,对应的电脑上需要有这个DLL才能运行,开发环境不用多说环境肯定比测试,生产环境丰富,

所以调用的C++DLL,我们哪怕我们明确它在我们项目里,但是在测试环境都有可能无法运行

C++时别人提供的,我们不知道对方还有那些引用。因此需要借助一些工具如Depend专门查看DLL引用依赖的工具,不过win10无法运行Depend,解析DLL时就程序就会卡死

这里win10推荐Dependencies 这是github地址:https://github.com/lucasg/Dependencies

上图就是通过依赖查看工具打开C++DLL之后的结果,可以清楚查看到都有拿下DLL引用,如果在系统文件夹下面没找到引用DLL(会产生异常信息“找不到指定模块”),此时需要补充必要的环境或直接将缺少的DLL复制到生产环境对应目录下就可以解决

这里需要仔细查看,因为是动态库,缺少任意一个子集引用都可能无法运行

C# 调用C++库引发不得不说的事的更多相关文章

  1. # 2017-2018-2 20155228 《信息安全系统设计原理》 使用VirtualStudio2008创建和调用静态库和使用VirtualC++6.0创建和调用动态库

    使用virtual c++ 6.0创建和调用动态库 不得不说一下关于环境的问题 只要我打一个响指,一半的安装在win7上的VC6.0都会因为兼容性问题直接崩掉 懒得研究怎么解决兼容性的问题了,直接开一 ...

  2. VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决

    VS2010 F5调试时出现 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常 两个解决方法:1) 打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上.2) 打开项目属性,选择调试选 ...

  3. Java调用动态库方法说明-最详细

    Java不能直接调用由c或者c++写得dll(TF_ID.dll),所以只能采用jni得方法,一步一步生成符合规范得dll文件(假设叫FANGJIAN.dll),在FANGJIAN.dll这个文件里来 ...

  4. C#:控制台程序调用中间库创建窗体

    1.类库项目引用System.Windows.Forms并添加引用后,才可创建窗体. 2.控制台应用程序调用中间库(DLL)中的方法创建窗体:中间类库使用反射下的Assembly加载包含窗体的类库及创 ...

  5. Android JNI如何调用第三方库

    http://www.2cto.com/kf/201504/388764.html Android JNI找不到第三方库的解决方案 cannot load library 最近做一个jni项目,拿到的 ...

  6. C++调用C#库简单例程

    有些时候,为了使用别人已经写好的C#库文件,我们需要使用C++调用C#库文件: 以下做了一简单的调用工程,步骤如下: 1.准备C#库 (dll文件)   1)创建C#库:     2)编写C#类:   ...

  7. iOS开发:在Swift中调用oc库

    先列举这个工程中用到的oc源码库: MBProgressHUD:半透明提示器,Loading动画等 SDWebImage:图片下载和缓存的库 MJRefresh: 下拉刷新,上拉加载 Alamofir ...

  8. Qt中调用PolarSSL库(一)

    最近一直在学习SSL相关的知识,也是先了解理论相关的知识,主要是SSL相关的基本概念和连接建立过程,主要是基于PolarSSL开源库进行学习.学习完了之后就希望能给有所运用,就想用Qt写一个简单的程序 ...

  9. [置顶] android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so

    0:前言: 在第二篇中,我们主要介绍了丙方android公司利用乙方C++公司给的动态库,直接调用库中的方法,但是这样方式受限于: 乙方C++公司开发的动态库是否符合jni的规范,如果不规范,则不能直 ...

  10. [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so

    0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...

随机推荐

  1. 基于PySyft与TensorFlow的医疗数据协同分析系统实现教程

    1. 引言:医疗数据协同分析的挑战与机遇 在医疗信息化进程中,数据孤岛问题日益突出.各医疗机构积累的海量医疗数据受限于隐私法规(如HIPAA.GDPR)无法直接共享,形成数据壁垒.联邦学习技术的出现为 ...

  2. 网络编程:epoll

    原理 select 的几个缺点: 1)每次调用select,都需要把fd集合从用户空间拷贝到内核空间,这个开销在fd很多时会很大 2)每次调用select都需要在内核遍历传递进来的所有fd,这个开销在 ...

  3. L1-3、Promp常见任务类型与写法模板

    --掌握任务类型,写 Prompt 就像套模板 想把 AI 当成好用的工具,第一步不是写 Prompt,而是识别任务类型.只有你先知道"我到底要它干嘛",才能说出"它该怎 ...

  4. 全球首个无限执行的 AI 出现!给我玩爽了

    给 AI 一句话,它就能自主执行任务,生成复杂的大型网站.几十页的 PPT.万字爆款图文.千万字长篇小说? 据说这是世界上第一款无限的 AI 智能体 -- Flowith. 无限这个词听起来有点东西啊 ...

  5. 在Linux下使用wxWidgets进行跨平台GUI开发(三)

    创建wxWidgets应用程序 在本文中,我们将了解创建wxWidgets应用程序所需的基础知识.首先创建一个简单的示例程序,展示如何显示图标:接着通过另一个示例演示事件的使用方法:最后探讨wxWid ...

  6. Java线程池详解:高效并发编程的核心利器

    Java线程池详解:高效并发编程的核心利器 在高并发的Java应用中,频繁创建和销毁线程是非常消耗系统资源的操作.线程池作为Java并发编程的核心组件,不仅能够复用线程.降低系统开销,还能有效控制并发 ...

  7. Oracle故障处理:分析Oracle数据库离奇的多快读慢

    我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效 ...

  8. 3节点开启大数据时代:EasyMR助力中小企业轻装上阵、国产转型

    在数字化浪潮中, 数据已成为中小企业竞争力的核心要素.然而,受限于预算.技术和运维能力,众多中小企业在建设大数据平台时常陷入"建不起.用不好"的困境. 传统大数据平台通常起步门槛高 ...

  9. HarmonyOS NEXT仓颉开发语言实战案例:银行App

    仓颉语言的商城项目基本开发结束啦,今天跟大家分享新的项目,一个银行app,说是新项目但是大家可能会有些眼熟,在ArkTS的教程中就写过这个项目.今天我们仓颉语言再写一遍,看看和ArkTS有什么不同. ...

  10. ET框架运行(Mac环境)--客户端

    1:环境 Mac电脑,安装.net cor2 2.2 ,JetBrains Rider编辑器,Unity环境(2018.4.28f1) 终端运行:  dotnet --version  查看是否安装n ...