dll文件

c++中DLL文件的编写与实现——三步走(2)

寵の児 提交于 2020-02-11 15:59:03
(本方法调用方需要.lib .dll) (问的人多了) C++在调用Dll中的函数的时候,如果是企业内部的话,肯定是希望三件套的方式(.h\.lib\.dll)。这样做的话,编写方可以在头文件中写入很多信息,方便调用方的调用。但是,一旦是给其他公司的人使用,而不想让别人看到的话,那编写方肯定是不想让别人看到过多的信息的,你只管调用。 还有一点是 dll是在调试的时候使用的,lib是编译的时候使用的,两者是不同时期使用的工具 如何操作 首先创建一个空的DLL文件,创建方法:新建——项目——Win32控制台程序——然后取个名字——确定——下一步——选择DLL——勾选空白项目。顺利新建了名字为Dll1的项目。项目中有这些东西(VS2017) 现在我们在Dll1.cpp中写点 #include "stdafx.h" extern "C" _declspec(dllexport) int add(int a, int b) { return a + b; } 然后编译,不过注意平台的设置 尽量和调用方一致嗷,避免白给。 然后点击生成 在x64——deBug目录下 找到Dll1.dll和Dll1.lib。 Dll编写我们算是结束了 接下来需要重新新建一个Win32的控制台程序取名字为Test 然后在Test.cpp中加入以下代码: #include "pch.h" #include

VS2013使用rtklib中需要注意的一些问题(编译)

做~自己de王妃 提交于 2020-02-10 11:54:53
VS2013使用rtklib中需要注意的一些问题(编译) 最近因为项目需要需要对rtcm数据进行解码,rtklib提供了很多底层的函数,准备直接输出标准DLL的方式供C#调用。下面把项目中引用rtklib源码需要注意的地方记录下。 1. 首先在vs2013中新建一个win32的dll项目,将rtk源码放到工程路径下(注意不是工程组所在路径),命名为rtklibsrc 2. 在项目上添加一个文件夹[rtklibsrc]然后在文件夹上【添加现有项目】把rtklib的源文件(rtklibsrc下文件)加入工程。在rtklibsrc下建立rcv把(rtklibsrc\rcv)下面的文件也添加到工程 3. 现在开始编译工程,你会发现很多错误。下面我们一步步来解决错误。 1> Q: error C1853: “Debug\rtklibHelper.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) x:\xxxx\rtklibhelper\rtklibsrc\tle.c 1 1 rtklibHelper A: 不使用预编译头 2> Q: 错误 1 error C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To

C++中书写和调用DLL

流过昼夜 提交于 2020-02-07 13:22:43
文章目录 DLL书写 import和export DLL的使用 隐式链接 显式链接 DLL书写 import和export 头文件由于不参与编译,所以一定要注意区分是在什么时候引用的。如果是在定义函数/类的源文件中使用(内部编译),则要使用__declspec(dllexport),指明要输出在生成的dll文件中的函数/类。但若在引用该DLL的文件中使用(外部引用),包含的头文件中应为__declspec(dllimport),指明要从对应的DLL文件中引入哪些函数/类。 头文件中最开始的宏定义往往如下,注意DLL_EXPORT最好更换为更特别的名字,以防引用该库的文件中也定义了该宏: # ifdef DLL_EXPORT # define DLL_API __declspec(dllexport) # else # define DLL_API __declspec(dllimport) # endif 为了成功编译,还要在预编译的头文件中预先定义DLL_EXPORT,同时在对应的DLL源文件中添加 #define DLL_EXPORT __declspec(dllexport) 。 DLL的使用 隐式链接 DLL程序书写完毕后编译后会在DEBUG文件夹下生成对应的.dll和.lib文件。新的项目若想引用该dll,则需要进行如下操作: 将.h头文件引入包含目录

Webpack构建项目进一步优化

谁说我不能喝 提交于 2020-02-06 19:39:15
Step14.Webpack构建项目进一步优化 webpack dll VS external webpack在打包后,生成的文件主要分为三种类型: * 业务代码 * 外部依赖库 * webpack runtime webpack中的 dll和externa l在本质上其实是解决的同一个问题:避免将某些外部依赖库打包进我们的业务代码,而是在运行时提供这些依赖。 一方面实现了代码拆分,以及依赖的复用,另一方面提升构建速度 . 这两种方案应该是各有各的优劣,分别适用于不同的环境。 (1) dll 与 externals的区别 d ll 符合前端模块化的要求 webpack配置上稍微复杂一些,需要预打包所需的dll资源,并在构建时配置相应的plugin, 使用 dll的前提是,这些外部依赖一般不需要发生变更。所以,如果某天发生了变更,那就需要将项目重新构建,违背了dll的使用前提,必然要作出相应的牺牲。 external不太符合前端的模块化思想, 所需要的外部库需要在浏览器全局环境下可访问 外部库升级的话,如果兼容之前的 API,不需要项目重新构建 webpack配置上稍微简单些,但是同样需要将所需的外部库打包为所需要的格式,并在运行态下引用 相比较而言的话, dll比external应该更加智能一些,主要体现在模块的引用和打包上。比如说如下方式去引用了react中的一个方法:

如何使一个你没有源代码的DLL文件变为强命名的DLL

喜夏-厌秋 提交于 2020-02-06 08:03:45
  有时候你会需要一个 DLL 是强命名的,比如你想把这个文件放到 GAC 里面。如果这是一个第三方的 DLL ,你没有源代码,这会是一件比较麻烦的事情。有一个方法可以解决这个问题。   在 VS.NET 的命名行窗口下,输入如下的代码。   1 ,生成一个 KeyFile   sn -k keyPair.snk   2, 得到程序集的 MSIL   ildasm SomeAssembly.dll /out:SomeAssembly.il   3 ,为了避免冲突,把原来的 DLL 文件改名   ren SomeAssembly.dll SomeAssembly.dll.orig   4 , 使用导出的 MSIL 和刚创建的 KeyFile 生成一个新的的 DLL 文件。   ilasm SomeAssembly.il /dll /key= keyPair.snk   这些工具都在哪里?   C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ilasm.exe   C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\ildasm.exe   C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sn.exe   为没有源码的

热更新

二次信任 提交于 2020-02-05 18:29:05
1.创建C#类库(dll)项目 2.删除命名空间,不然可能会出错 public class Manager { private int count; public Manager() { count = 2; } public string IntToStr() { return count.ToString(); } } public class Login:MonoBehaviour { void Start() { Manager mgr = new Manager(); Debug.Log(mgr.IntToStr()); } } 3.点击生成 将Test2.dll 的后缀名改为bytes -> Test2.bytes 将这个文件拖拽到Unity工程中 将工程打包为Hot.unitypackage 本次样例路径:C:/Users/14486/Desktop/2020/热更新学习/Hot/Hot.unitypackage 在unity项目中添加脚本: private static readonly string DLL_URL = "file:///C:/Users/14486/Desktop/2020/热更新学习/Hot/Hot.unitypackage"; void Start() { StartCoroutine(LoadDllScript()); } private

LabVIEW调用DLL动态链接库

你说的曾经没有我的故事 提交于 2020-02-05 03:23:49
LabVIEW调用DLL动态链接库 有些数据运算比如多个数组之间的处理、雨流计数法、卡尔曼滤波使用labview这样的图形编程语言实在过于麻烦,实现不难但有一定的逻辑复杂度,倒不如用C++或者matlab来实现,之后生成DLL供LabVIEW调用。 示例一 通过调用DLL实现数组求和。输入一个10个元素的数组,返回全部元素之和。 1.生成DLL VS中选择创建动态链接库项目 在头文件和源文件文件夹分别创建相应的.h .cpp文件 在test.h中添加函数声明 extern "C" __declspec ( dllexport ) int qiuhe ( int raw [ 10 ] ) ; 在test.cpp中写函数体,注意要包含这两个头文件 # include "pch.h" //--- # include "test.h" //--- extern "C" __declspec ( dllexport ) int qiuhe ( int raw [ 10 ] ) { int add = 0 ; for ( int i = 0 ; i < 10 ; i ++ ) add + = raw [ i ] ; return add ; } 点击生成解决方案就得到DLL文件。无法直接运行或者调试,可以间接使用。 2.写LabVIEW程序 程序框图页面——互联接口——库与可执行程序—

.net程序集强命名(签名)

女生的网名这么多〃 提交于 2020-02-01 08:28:56
要想得到强签名的dll有两种情况: 1.给项目添加强命名 在你的项目右键->属性->签名,勾选“为程序集签名”,新建 或 浏览已经新建过的.pfx文件,然后重新build项目,生成的dll就是强命名的dll了。 2.直接给dll强命名 运行vs自带的命令提示工具,执行 sn -k [文件名].snk 命令创建snk文件(其中[文件名]你自己命名,可以包含路径); 使用ildasm **.dll /out:**.il 将dll生成中间语言文件 再使用ilasm **.il /dll /key=[文件名].snk 生成dll,该dll会覆盖之前没用签名的dll。 问题:当添加完签名的项目编译报下列错误   错误 1 无法导入以下密钥文件: **.pfx。该密钥文件可能受密码保护。若要更正此问题,请尝试再次导入证书,或手动将证书安装到具有以下密钥容器名称的强名称 CSP: VS_KEY_67579BF105843F74。 解决方法:   运行vs自带的命令提示工具,执行 sn -i [文件名].pfx [VS_KEY],然后会让你输入密码,此时输入创建pfx时设置的密码即可。   注意:在cmd中输入密码时没有任何显示,输入完直接回车就行了。 来源: https://www.cnblogs.com/dreamofei/p/5066619.html

C#-VS程序集

筅森魡賤 提交于 2020-02-01 08:26:58
程序集即代码组,可以是单个文件或多个文件,按一个整体部署,但可指定自身调用其他程序集的版本。 推出原因 为解决dll地狱而推出,也可解决其他问题。dll地狱,a应用使用dll版本1,b应用使用dll版本2,传统的com(一般用dll执行)模式,会自动调用最新版本的dll,如果这个dll不向后兼容(大多dll都不向后兼容),导致装了b应用后,a应用不能使用。 .net模式,在程序集中,指定使用哪个版本,在调用时,默认使用指定的版本,解决了dll地狱问题。 程序集信息 主版本,次版本、修订号、内部版本号 公司公钥 程序集人类友好名称 程序清单。包含在一个可执行文件中,或表示为一个独立的文件。 提供的自定义类型 引用其他程序集的信息。名称、版本、区域性和公钥。 类型元数据。程序集提供给外部使用的自定义类型 msil代码。各种语言最终被编译成的代码,这代码能被clr执行 资源。通常指图片、本地化翻译文本等被塞入程序集的所有其他文件。 构建程序集 写入上述程序集信息,还可以自定义特性,设置一般特性是[assembly:AttributeName("AttibuteValue")]注意不是语言的一部分,但在程序文件中,不用分号。要引用system.Reflection空间。程序集信息也可以在VS的解决方案管理器,项目文件,右键属性设置。 创建单文件程序集 用csc 程序集文件名 或VS的生成

java调用C++ DLL库方法

妖精的绣舞 提交于 2020-02-01 02:55:15
  最近一个项目要开发网页端人脸识别项目,人脸识别的算法已经写好,是C++版,但是网页端要求使用Java后台,这就涉及到Java调用DLL的问题。经过查找,实现了一个简单的例子。 1、第一步,先在Java中新建一个类 如上图,其中注意这句System.loadLibrary("javaCallcpp");,这就是加载dll文件的代码了。然后我们需要dll中实现下面定义的加减乘除方法。 2、编译文件,文件名为Java2cpp.java,首先编译成class文件,如果用的是eclipse,这个文件已经自动生成了,在工程目录下的bin文件夹下。用命令行编译,打开cmd窗口,cd到.java文件所在目录,执行命令javac Java2cpp.java,即生成Java2cpp.class 然后执行命令javah Java2cpp生成Java2cpp.h头文件,但是这一步往往会失败,另一种方法可以成功,进入eclipse项目的目录,进入bin文件夹,执行命令javah -classpath . -jni 包名.类名(com.test.jni.Java2cpp),然后生成了com_test_jni_Java2cpp.h 3、在VS中新建项目win32项目,命名为:TestJNI第二步选择如下: 4、把第二步生成的头文件拷进项目文件夹,然后导入。 5、实现头文件中的方法: (1