第三方引用库使用方式有两种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. Django 中URL和Views相关知识梳理(极简版)

    提示:仅供梳理参考,很多相关的细节内容忽略. 1.URL  (1)URL匹配的规则是正则,关于正则不再赘述. (2)URL优先级顺序:从urlpatterns的底部开始搜索,一直往上搜索,需要注意的是 ...

  2. VMware NSX Manager SSL证书更新

    安装 NSX 后,管理器节点和集群具有自签名证书.证书有效期为825天,到期后需要进行证书重新更新.如图所示,本环境中此次将有三个类型的证书即将到期需要替换:1.NSX 联合身份验证 PI(Local ...

  3. AI 极客低代码平台快速上手 --生成Python代码

    1.侧栏菜单选择"Python": 点击代码区右上角的"代码魔法棒"图标,在弹出的确认面板中点击"确认"按钮,一秒生成基于FastApi最新 ...

  4. XSSpecter - Blind XSS 检测与管理工具

    XSSpecter 是一个模块化的盲测跨站脚本(XSS)漏洞管理工具包,包含服务端回调处理和客户端自动化测试工具. 项目概述 XSSpecter 提供两大核心组件: 服务端 - 处理XSS回调.数据持 ...

  5. python实现md5签名

    在Python中,hashlib.md5是一个用于计算MD5哈希值的模块.MD5是一种常用的哈希算法,它将输入数据转换为固定长度的哈希值. def get_api_sign(): "&quo ...

  6. openssl头文件出现DEPRECATEDIN_1_1_0导致引入头文件时程序无法编译

    我使用的是unbuntu20.04版本中,通过apt安装的openssl,发现openssl中的多个库文件中会出现类似'DEPRECATEDIN_1_1_0(unsigned char *ASN1_S ...

  7. tkela二次开发之lay文件解析

    在tekla的一些配置文件中绝大都是本文格式存储的,如.dim:.ad:.vi;.tpl等文件:但是其中.lay文件却是一个例外:这个文件用txt开打时里面是会有乱码的. 我们知道这个文件是在软件的界 ...

  8. Svelte 5 在跨平台 AI 阅读助手中的实践:轻量化前端架构的极致性能优化

    一.引言:为什么选择 Svelte 5 来构建 Saga Reader 的前端? 作为一个典型的前端开发者,去年在为公司调研Rust前端工具链.LLM应用开发技术体系的时候,对这类技术领域产生了浓厚的 ...

  9. update 批量修改sql 记录

    update_table 是要修改的表 join_table 是关联另一张表来修改update_table表的字段 update update_table set id= tmp.id from jo ...

  10. 从 TCP 到 WebSocket:一次搞懂网络通信的三层演进

    引言 在现代应用开发中,网络通信是绕不开的核心议题.无论是构建传统的 Web 应用,还是开发需要实时交互的系统(如在线协作工具.金融行情推送.多人游戏),我们总会与 TCP.HTTP.WebSocke ...