2016-03-15:关于VS中模块定义文件
1 def模块定义文件
在使用开源库libx265时,因x265项目的头文件x265中有如下的宏定义
#ifdef X265_API_IMPORTS
#define X265_API __declspec(dllimport)
#else
#define X265_API
#endif
当使用libx265动态库时,因没有定义X265_API_IMPORTS宏,也没有定义相关的模块定义文件,导致在链接时,总是提示对应函数链接不成功错误。
解决方案就是在项目中添加对应的模块定义文件。
另外,如果是编译64bit的libx265动态库,需要将工程的平台修改成x64。具体方法是在属性也的配置管理器中进行配置
最后,修改目标计算机为X64,否则因目标不匹配而无法通过编译。
2 引用动态库中全局变量
示例如下:创建动态库,使用def文件导出变量和函数
动态库头文件lib.h
#ifndef _LIB_H
#define _LIB_H void lib_printf(); #endif
动态库实现文件lib.c,并且定义全局变量
#include "lib.h"
#include <stdio.h> void lib_printf()
{
printf("this is lib_printf\n");
} int lib_int = 10;
模块定义文件lib.def
EXPORTS
lib_printf
lib_int DATA
工程属性设置
使用动态库中全局变量,必须使用 _declspec(dllimport)导入
#include "lib.h"
#include <stdio.h> extern int _declspec(dllimport) lib_int; int main()
{
lib_printf();
printf("lib int [%d]\n", lib_int);
return 0;
}
3 MSDN官方示例
https://msdn.microsoft.com/zh-cn/library/8fskxacy.aspx
2016-03-15:关于VS中模块定义文件的更多相关文章
- [转]VS2010中使用模块定义文件(.def)
都知道在写DLL的时候,使用模块定义文件(.def)可以防止DLL里的命名变更. vc6.0中只要在当前目录下添加.def文件,然后编译就Ok了 但在vs2010里这样做是不可以的,必须在项目--属性 ...
- 2016.8.15上午纪中初中部NOIP普及组比赛
2016.8.15上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1333 这次比赛不怎么好,因为这套题目我并不是很擅长. 可同学们 ...
- 第7.15节 Python中classmethod定义的类方法详解
第7.15节 Python中classmethod定义的类方法详解 类中的方法,除了实例方法外,还有两种方法,分别是类方法和静态方法.本节介绍类方法的定义和使用. 一. 类方法的定义 在类中定 ...
- 模块定义文件.def
一作用 DLL中导出函数的声明有两种方式:一种为在函数声明中加上__declspec(dllexport),这里不再举例说明:另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供 ...
- Python中模块安装文件的创建及使用
在Python编程中,我们常常需要自己编写模块,当模块文件写好了,就需要创建安装文件,方便模块的发布. 此时,常用的方法,就是使用Python distutils(代表distribution uti ...
- 详解模块定义(.def)文件
一个完整的Windows应用程序(C++程序)通常由五种类型的文件组成:源程序文件,头文件,资源描述文件,项目文件,模块定义文件.本文主要讲解模块定义文件. 模块定义 (.def)文件为链接器提供有关 ...
- DLL用def定义文件来导出重载函数(转)
动态链接库DLL_Sample.dll DLL_Sample.h:#ifdef TEST_API# define TEST_API _declspec(dllexport)#else# define ...
- Kali linux 2016.2(Rolling)中的payloads模块详解
不多说,直接上干货! 前期博客 Kali linux 2016.2(Rolling)中的Exploits模块详解 payloads模块,也就是shellcode,就是在漏洞利用成功后所要做的事情.在M ...
- 可用于在 Microsoft.NET Framework 4.0 中的 ASP.NET 浏览器定义文件的修补程序
http://support.microsoft.com/kb/2600088 此修补程序为 Internet Explorer 和 Mozilla Firefox 在浏览器定义文件引入了更新的定义. ...
随机推荐
- SparkStreaming入门及例子
看书大概了解了下Streaming的原理,但是木有动过手啊...万事开头难啊,一个wordcount 2小时怎么都运行不出结果.是我太蠢了,好了言归正传. SparkStreaming是一个批处理的流 ...
- PLSQL_数据泵定参数批量导入多表Expdp/Impdp Parfile(案例)
2015-04-01 Created By BaoXinjian
- c++学习-特殊类成员
静态变量: #include<iostream> #include<string> #include <typeinfo> using namespace std; ...
- sax,Dom,等解析方式地址 ?
Android中使用SAX对XMl文件进行解析 http://blog.csdn.net/developer_jiangqq/article/details/7197045 使用SAX技术对XML文档 ...
- c#4
float translation = Time.deltaTime * 10; transform.Translate(0, 0, translation);//沿z轴移动 public cla ...
- Eclipse "IOConsole updater" has encounter a problem
因为调试方便,把eclipse里的控制台输出调整为无限制了,结果各种log打了一夜居然把堆内存打爆了. 还是改回去吧. 在日志输出的状态下(貌似没日志的时候没法选)右键console的内容区域 -&g ...
- JAVA 数组实例-求学生成绩的最大成绩,获取数组中的最大值、最小值
实例: import java.util.*; //求学生最大成绩 public class Test{ public static void main(String[] args){ System. ...
- struts2中action中的通配符
struts中一个正常的最普通不过的action是这样子的 <package name="default1" namespace="/gys" exten ...
- [SQL]公交新路问题
--解答一 CREATE TABLE T_Line( ID nvarchar(), --公交线路号 Station nvarchar(), --站点名称 Orders int) --行车方向(通过它反 ...
- 100. Same Tree(Tree)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tre ...