dll文件

用IKVMC将jar转成dll供c#调用

笑着哭i 提交于 2019-11-29 21:18:13
目录 前言 ikvmc介绍 ikvmc下载安装 下载并解压 设置环境变量 jar->dll 常用参数说明 具体操作 解决方案 前言 实习到现在所需要的工具类给的都是jar包,但是我需要在.net环境下去实现,如果重新下的话回合那麻烦,因此如果能将c#能够调用jar那就太棒了 ikvmc介绍 IKVMC 可以将jar转成dll,到现在为止已经成功转换3个jar为dll,期间碰壁无数,在此写下此篇文章希望能帮助到有需要的人。 ikvmc下载安装 下载并解压 这并没有什么很大问题, 下载 压缩包解压出来,解压出来的主要文件在bin目录下 设置环境变量 在win8.1/win10下的步骤如下: 通过 计算机/此电脑 (根据系统名称而不同)右击-> 属性 -> 高级系统设置 -> 环境变量 找到系统变量下面的path添加路径如_ C:\ikvmc-XXX\bin\; _ 运行命令行 cmd ,输入 ikvmc 查看帮助 输出如图所示,则准备工作已经完成 jar->dll 常用参数说明 -target:library 使用方法: ikvmc -target:library a.jar 由于我们的目的是把jar转为dll,此参数就是此作用 -reference:<filespec>(-r:<filespec>) 使用方法: ikvmc -target:library a.jar -r:b.dll

同事遇到了一个问题(在DllMain函数之前抢控制权)

给你一囗甜甜゛ 提交于 2019-11-29 19:03:47
同事有个需求,他的进程会加载一个DLL,他需要在那个DLL的DllMain函数执行之前控制DLL,修改DLL的内存。 以上工作要求全部在应用层执行。 这个其实有点悲剧。 因为这个需求其实有点坑,因为需要在应用层来做,而且好多事情都是高难度事情。 最后我给提了几种解决方案。 1:HOOK LoadLibraryA/W,然后发现如果是目标DLL,那么使用LoadLibraryEx不执行DllMain加载,然后等加载成功了之后,先处理DLL,最后创建线程执行DllMain。 优点:简单方便,工作量少。 缺点:DllMain线程环境、调用栈是伪造的,可能会被检测发现。 2:为了规避上面的问题,就不能用其他函数来做了,只能乖乖使用LoadLibrary族正统的函数,刚好,有一个。 当LoadLibraryA/W抓到了目标DLL之后,可以根据文件解析它的入口点,然后再在入口点处写入一个“C3”,即“ret”,是写入文件中, 然后再调用真实的LoadLibraryA/W函数加载,之后再去找这个入口点,修复C3,最后创建线程执行DllMain。 优点:比上面还简单。只是按位置写文件即可。 缺点:工作量比较大,需要修改原模块,可能导致原模块在其他进程中无法启动,DllMain线程环境、调用栈是伪造的,可能会被检测发现。 3:如果不想那么麻烦的话,还有个办法。 当LoadLibraryA

内存泄露:a CDynLinkLibrary object at...的解决

纵然是瞬间 提交于 2019-11-29 16:33:57
这两天在设计一个项目,独立了几个 DLL 模块。昨天勉强把前段工作做完了,需要的 DLL 也都挂进了 EXE 文件之中,暗自高兴了一把。不过晚上在看的时候,发现 VS2005 输出窗口提示有内存泄露: a CDynLinkLibrary object at... 心里总觉得不爽 L 今天去 Google 搜索了一下,第一篇是:当您使用多个 MFCDLL 报告内存泄漏 http://support.microsoft.com/kb/167929/zh-cn 由于是“ 注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。”所以没有怎么仔细看。 后来通过注释代码发现,原因可能是因为一个 DLL 内部使用另一个 DLL 中的导出类造成的。于是将这两个 DLL 合并到一个 DLL 中,再链接到 EXE 中测试,果然没了 J 但是我又不想将这两个 DLL 合并到一起,因为另一个 DLL 是“通用”的。我在想,这倒底是什么原因呢?一生气,算了,直接搞个 Win32 DLL ,也不使用什么 MFC DLL 。 建立好 Win32 DLL 之后,拷贝以前 DLL 中的类到项目,加进去编译。编译器却提示说:什么 MFC 工程需要 MFC DLL 支持。再一想,原来是因为以前的 MFC DLL 向导会默认包含 stdafx.h 。纯 Win32 DLL 不需要这个。突然之间,又想到了一个问题

扩展CURL后,cmd命令无法加载

大兔子大兔子 提交于 2019-11-29 13:05:59
昨天服务器上扩展CURL后,phpinfo()显示开启正常,测试后也正常,但是通过CMD命令执行代码,出现curl_init()未定义,弹出好多警告,怀疑是cmd执行时,没有加载到dll文件,google后找到解决办法: 将PHP安装目录中找libeay32.dll,ssleay32.dll,php_curl.dll,php5ts.dll四个DLL文件,有的在ext目录,找到后将他们复制到system32下,问题解决 来源: oschina 链接: https://my.oschina.net/u/144419/blog/70385

库开发遇到问题总结

末鹿安然 提交于 2019-11-29 08:24:09
1.运行程序异常退出 Qt调用相机SDK的dll,编译器使用vc2015,调用dll采用#pragma comment方式,改用在.pro文件里添加引用此库文件,程序运行正常。 #ifdef _WIN64 #pragma comment(lib,"..\\ScanHC\\three_parts\\HClass\\SDK\\Camera\\KSJ\\KSJApi.Lib\\KSJApi64.lib") #else #pragma comment(lib,"..\\ScanHC\\three_parts\\HClass\\SDK\\Camera\\KSJ\\KSJApi.Lib\\KSJApi.lib") #endif//_WIN64 解决方法:把用到的库文件拷贝到编译运行文件目录下,如debug目录下,程序执行就正常了。 来源: https://www.cnblogs.com/ike_li/p/11493396.html

vs 加载 dll 缓慢

无人久伴 提交于 2019-11-29 05:32:58
https://jingyan.baidu.com/article/642c9d34e25cc2644b46f74b.html http://www.it610.com/article/2611781.htm 可以把所有的DLL下载了先 最近安装Virtual Studio 2013,发现每次加载运行程序时,特别是一个solution里面有多个文件,需要较多dll时,都需要半天,显示如下: 原因是每次程序执行时,都要从服务器端加载dll,确实浪费时间,下面是解决方法: 打开VS的【工具】-【选项】-【调试】-【符号】,如下图: 1、先取消勾选“Microsoft符号服务器” 2、清空符号缓存 3、然后重启一哈VS2013 视图如下: 步骤一: 步骤二: 以后运行程序就没有那么DT了! Virtual Studio 2013 每次加载程序(dll)缓慢的问题 来源: https://www.cnblogs.com/jiangfeilong/p/10095943.html

delphi 将Dll等生成资源文件

▼魔方 西西 提交于 2019-11-29 04:42:48
资源文件一般为扩展名为res的文件,其自带的资源编译工具BRCC32.EXE(位于/Delphi/BIN目录下) 1.编写rc脚本文本 用记事本或其它文本编辑器编写一个扩展名为rc的文件,格式分别为在资源文件中的名称->类型->实际文件名称。 例如:要将文件名 demo.Dll的文件打包成一个资源文件,首先 新建一个文本文档,输入内容 mydemoDll RCDATA demo.DLL mydemoDll 和 RCDATA 你可以随便写,这个是为了在使用资源时定义的名称和类型你也可以写成:a b demo.DLL 将文本保存,保存后将文本的后缀(.txt)改成(.rc) 2.将rc文件编译成res资源文件 将脚本文件和实际文件拷到Brcc32.EXE所在目录,执行DOS命令。格式为:Brcc32 脚本文件(回车), 例如: 将上面的Mydll.rc和demo.Dll拷到Brcc32.EXE所在目录,执行 Brcc32 Mydll.rc(回车)即可。如果编译成功,则会生成一个Mydll.res的文件,这个文件就是我们需要的资源文件。 3.在Delphi单元中加入资源文件 将生成的res资源文件拷贝到你所编程序的路径下,在单元文件{$R *DFM}后加上一句{$R Mydll.res},则将res文件加入去,编译后资 源文件即已包含在可执行文件中了。若你有多个资源文件,也按上法依次加入

python 调用c++ dll 动态库

扶醉桌前 提交于 2019-11-29 00:28:46
一丶C++ 编译类动态库 1)新建生成.dll文件的空项目 双击: 2)编写头文件:pycall.h //test.h #pragma once class Mymath { int sum(int, int); int sub(int, int); }; 1234567 注:#define DLLEXPORT extern “C” __declspec(dllexport) 1. windows下需要使用__declspec(dllexport)的声明来说明这个函数是动态库导出的 2.extern “C”声明避免编译器对函数名称进行name mangling,这对于使用C++来编写DLL/SO是必须的。 3)编写实现文件:pycall_so.cpp #define DLLEXPORT extern "C" __declspec(dllexport) #include"pycall.h" //两数相加 DLLEXPORT int sum(int a, int b) { return a + b; } //两数相减 DLLEXPORT int sub(int a, int b) { return a-b; }12345678910 然后生成解决方案: 生成了动态链接库和静态链接库 二丶python利用Ctypes调用C++动态库 把刚才生成的动态链接库放到.py文件夹下:

【C#】找不到Microsoft.SqlServer.SqlClrProvider 复制C:\Windows\assembly的dll

十年热恋 提交于 2019-11-28 20:17:25
问题 在本地开放调试好好的,但是软件安装到别的电脑就出现:could not load file or assembly Microsoft.SqlServer.SqlClrProvider, Version = 10.0.0.0 解决 于是我从网上下载了Microsoft.SqlServer.SqlClrProvider.dll,但是还是报错,因为版本不对 后面查资料,发现调试过程中,调用了本地C:\Windows\assembly的dll 所以只能复制本地电脑的dll到项目中 C:\Windows\assembly的文件无法直接复制出来,只能通过下面命令复制 xcopy C:\Windows\assembly\GAC_MSIL d:\dll /e /c 复制到d:\dll 复制完成,复制D:\dll\Microsoft.SqlServer.SqlClrProvider\10.0.0.0__89845dcd8080cc91的dll到项目,引用就可以了 来源: https://blog.csdn.net/weixin_38211198/article/details/100119381

WinDbg扩展

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-28 18:16:06
WinDbg的扩展,也可以叫插件。它用于实现针对特定调试目标的调试功能,用于扩展某一方面的调试功能。扩展的实现是通过扩展模块(DLL)实现的。Windbg本身已经包含了很多扩展命令,这些扩展为这Windbg调试器提供了强大的功能和灵活性。调试器扩展命令的使用与标准调试器命令非常相似。但是,虽然内置调试程序命令本身是调试程序二进制文件的一部分,但调试程序扩展命令是由与调试程序不同的DLL公开的。windbg可以添加扩展功能,用户可以自己实现一组功能并添加到windbg中,把包含扩展功能的dll文件放到windbg目录下的winext子目录 ,windbg就会自动加载扩展模块。这允许您编写新的调试器命令,这些命令是根据您的特定需求定制的。 加载调试器扩展DLL 有几种方法可以加载调试器扩展DLL,以及控制默认调试器扩展DLL和默认调试器扩展路径: 在启动调试程序之前,使用\u nt \u debugger \u extension \u path环境变量设置扩展DLL的默认路径。这可以是多个目录路径,用分号分隔。 使用.load(加载扩展dll)命令加载新的dll。 使用.unload(卸载扩展dll)命令卸载dll。 使用.unload all(卸载所有扩展DLL)命令卸载所有调试器扩展。 启动调试器之前,使用-a命令行选项设置默认扩展dll。 使用.extpath(设置扩展路径