dll文件

VS2017创建C++动态库(DLL)

匿名 (未验证) 提交于 2019-12-02 23:41:02
方式一: 创建空的c++动态库 (1)创建Visual C++ ―》空项目 (2) 修改项目属性 将配置类型改为 动态库(.dll), 目标文件扩展名改为 (.dll), 另外注意平台的一致性32位、64位 (3)添加MyDLL.h文件和MyDLL.cpp文件 MyDLL.h文件代码如下: MyDLL.h文件代码如下: 方式二: (1)Visual C++ ―》Windows桌面―》动态链接库(DLL) (2)创建.h头文件 这里.cpp文件已经创建与工程文件名相同,只需要创建头文件即可。 以上两种方式创建C++ DLL均可 文章来源: https://blog.csdn.net/any1234567890/article/details/91491073

VS报错:error MSB8011: Failed to register output. Please try enabling Per-user Redir......

匿名 (未验证) 提交于 2019-12-02 23:36:01
关于error MSB8011: Failed to register output. Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions.解决办法: 大概有四种: 第一种:Solution Explorer ->项目节点->鼠标右键->Properties->Linker ->General->Pre-user Redirection 设为TRUE 就好了。 对应的中文版是: Solution Explorer ->项目节点->鼠标右键->属性->链接器->常规->逐用户重定向 第二种:提升程序的运行权限,使用管理员权限运行 第三种:关闭重定向,工程-->Propertier-->Linker-->General-->Register Output-->NO 第四种:使用depends.exe打开生成的.ocx文件,查看需要的依赖库,如果缺少某个.dll文件,depends.exe会提示找不到xx.dll文件,这时候需要找到相应的xx.dll文件,将其复制到.ocx文件目录下 文章来源: https://blog.csdn.net/buknow/article/details/90645023

C#中DllImport用法和路径问题

匿名 (未验证) 提交于 2019-12-02 23:26:52
原文: C#中DllImport用法和路径问题 DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息。 DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称。 DllImport的定义如下: [AttributeUsage(AttributeTargets.Method)]   public class DllImportAttribute: System.Attribute   {    public DllImportAttribute(string dllName) {…} //定位参数为dllName    public CallingConvention CallingConvention; //入口点调用约定    public CharSet CharSet; //入口点采用的字符接    public string EntryPoint; //入口点名称    public bool ExactSpelling; //是否必须与指示的入口点拼写完全一致,默认false    public bool PreserveSig; //方法的签名是被保留还是被转换    public bool SetLastError; /

windows 动态库导出

不羁的心 提交于 2019-12-02 23:26:30
以下内容来自博客: https://blog.csdn.net/fengbingchun/article/details/78825004 __declspec是Microsoft VC中专用的关键字,它配合着一些属性可以对标准C/C++进行扩充。__declspec关键字应该出现在声明的前面。 __declspec(dllexport)用于Windows中的动态库中,声明导出函数、类、对象等供外面调用,省略给出.def文件。即将函数、类等声明为导出函数,供其它程序调用,作为动态库的对外接口函数、类等。 .def文件(模块定义文件)是包含一个或多个描述各种DLL属性的Module语句的文本文件。 .def文件或__declspec(dllexport)都是将公共符号导入到应用程序或从DLL导出函数。如果不提供__declspec(dllexport)导出DLL函数,则DLL需要提供.def文件。 __declspec(dllimport)用于Windows中,从别的动态库中声明导入函数、类、对象等供本动态库或exe文件使用。当你需要使用DLL中的函数时,往往不需要显示地导入函数,编译器可自动完成。不使用__declspec(dllimport)也能正确编译代码,但使用__declspec(dllimport)使编译器可以生成更好的代码。编译器之所以能够生成更好的代码

跟踪OceanLotus的新下载程序KerrDown

匿名 (未验证) 提交于 2019-12-02 23:05:13
两种方法将KerrDown下载器传递给目标。一个是使用带有恶意宏的Microsoft Office文档,另一个是包含带有DLL side-loading合法程序的RAR存档 。对于RAR存档文件,用于欺骗目标的文件名都是越南语 * DLL Side-Loading 程序可以指定在运行时加载的DLL https://attack.mitre.org/techniques/T1073/ 两个不同的base64 blob插入到单独的表中,并且字体大小已更改为1。 图 1:诱饵文件 一旦增加了字体大小,base64 blob就会在两个不同的表中可见。解码后,可以在每个表的开头看到PE DLL的MZ头 图 2:作为文本嵌入文档的Base64 编码的 pe dll 文件。 根据iCheck变量检查应解码哪个base64 blob,如果受害者系统在64位系统上运行则设置为true,而在32-位系统。如果发现系统是64位,则左侧的base64编码blob将被解码,否则右侧的base64编码blob将被解码。 图 3 :基于系统检查的Base64 blob选择 重用了Motobit发布的VBS解码功能 。图4显示了宏代码中使用的base64函数与Motobit发布的VBS base64解码器函数之间的比较。 图 4 :Base64 解码器比较 * motobit Base64 https://www

ctypes 载入 dll 产生[WinError 126] 错误原因及解决

匿名 (未验证) 提交于 2019-12-02 22:56:40
本文参考自 ctypes 载入 dll 产生[WinError 126] 错误原因及解决 查看原文: 原文地址 背景:c++自定义创建dll,依赖于gda201.dll(如何创建dll的部分略),并提供给python调用 报错信息: Traceback (most recent call last): OSError: [WinError 126] 找不到指定的模块。 很显然,错误的原因在于 testDLL.dll依赖于gda201.dll,而 Python 进程没有找到 单纯将这两个dll文件放在同一目录下是没有作用的,因为 Python进程 起始路径并不是t estDLL.dll的目录。 网上的建议是在系统环境的 path 里面里面加入 dll 的目录,或者把这些 dll 都一起复制到 Python.exe 所在的目录。但是我觉得不妥,虽然暂时解决了问题,但是若是将 t estDLL.dll交给其他环境使用时一样会出问题。 解决方案其实非常简单,修改当前的工作路径即可。 解决方案: 增加语句os.chdir('D:\\ge\\testDLL\\x64\\Debug\\') 本文参考自 ctypes 载入 dll 产生[WinError 126] 错误原因及解决 查看原文: 原文地址 文章来源: ctypes 载入 dll 产生[WinError 126] 错误原因及解决

Python 报错:NameError: name 'ctypes' is not defined

匿名 (未验证) 提交于 2019-12-02 22:51:30
使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件) 引入ctypes库 有两种方法 from ctypes import * import ctypes stdcall调用约定:两种加载方式 Objdll = ctypes . windll . LoadLibrary ( "dllpath" ) Objdll = ctypes . WinDLL ( "dll" ) cdecl调用约定:也有两种加载方式 Objdll = ctypes . cdll . LoadLibrary ( "dllpath" ) Objdll = ctypes . CDLL ( "dll" ) 引入ctypes库的方法不同,对应不同的加载DLL方式 第一种: from ctypes import * Objdll = ctypes . WinDLL ( "dll" ) #或者 Objdll = ctypes . CDLL ( "dll" ) 第二种: import ctypes Objdll = ctypes . windll . LoadLibrary ( "dllpath" ) #或者 Objdll = ctypes . cdll . LoadLibrary ( "dllpath" ) 来源:博客园 作者: conpi 链接:https://www

python 调用c++ dll 动态库

匿名 (未验证) 提交于 2019-12-02 22:51:30
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 然后生成解决方案: 生成了动态链接库和静态链接库 把刚才生成的动态链接库放到.py文件夹下: import ctypes

unity 代码C#封装为dll

匿名 (未验证) 提交于 2019-12-02 22:10:10
2并选择类库类型 3编写简单的代码看看效果(发现会报错),主要是没有添加类库,以及using UnityEngine;引用空间 4添加类库,引用空间 发现依然会报错,这就需要添加应用库unityengine.dll,方法如下 找到安装unity目录下的UnityEngine.dll,添加后你就会发现,报红的地方消失 5右键解决方案,生成解决方案 在此之前你需要选择运行的.framwork版本,需要和unity的使用版本要求一致,我的是在.framwork3.5之下 6.这时候你可以在项目中找到dll文件,加入到unity 在代码中调用dll 需要using 命名空间 这是我做的链接:https://pan.baidu.com/s/1i3LBHrkQOg7eCh9Sf-EQVw 密码:aqvp 有什么好的方法,大神多多留言 文章来源: unity 代码C#封装为dll

C++在windows与linux下编译动态库

匿名 (未验证) 提交于 2019-12-02 21:56:30
一、.so与.dll比较 1、.so的单独编译链接 从网上找的一个例子: 头文件:so_test.h 三个.c文件:test_a.c test_b.c test_c.c //so_test.h #include "stdio.h" void test_a (); void test_b (); void test_c (); //test_a.c #include "so_test.h" void test_a () { printf ( "this is in test_a...\n" ); } //test_b.c #include "so_test.h" void test_a () { printf ( "this is in test_a...\n" ); } //test_c.c #include "so_test.h" void test_c () { printf ( "this is in test_c...\n" ); } 打开命令行,编译动态库:libtest.so gcc test_a . c test_b . c test_c . c - fPIC - shared - o libtest . so 动态库的链接 //test.c #include "so_test.h" int main () { test_a (); test_b (); test_c