关于dll链接问题

来源:百度知道 编辑:UC知道 时间:2024/05/19 03:00:58
自己的一个程序,一个执行项目,一个dll项目.用的IDE是vs2005
dll项目里的导出函数和变量都用了extern "C" __declspec(dllexport)进行了声明,而在在执行项目的需要用到导出函数和变量时都进行了extern "C" __declspec(dllimport),哪知在链接时总是出现:
warning C4273 : "***" : dll 链接不一致
参见“***”的前一个定义
假如我把它声明为extern "C" __declspec(dllexport)或不声明直接使用却没有这些警告出现
导出的变量更恼火,如果仅仅是声明也就是上面所说的那种警告,假如要使用它,无论是赋值还是读取,在链接时都会出现:
error LNK2001: 无法解析的外部符号 ***
fatal error LNK1120: 1 个无法解析的外部命令

因为我是导入了dll项目的头文件的,所以我不知道这个无法解析符号应该是不是在找不到定义上,可我的所有定义被包含在一个cpp文件里的,它既然找得到函数或其他,也应该找到得到变量啊

由于没写过几次dll,许多问题百思不得其解,望高人指点,高分奉上
你们说的方法我都试过,要不是实在没办法,我也不会发高分来提问了~希望某个解决过这个问题的人来提点一下

一直觉得error LNK2001错误是只找到声明没找到定义的问题,可变量定义跟函数定义一起放在一个文件里,函数都找得到,为什么变量没找到~当然也不能完全肯定是这个原因

方法1: 选择项目->属性->预处理器->预处理定义, 增加:HYCOMMONWINAPI_EXPORTS

方法2:
就是在
#ifdef HYCOMMONWINAPI_EXPORTS
#define HYCOMMONWINAPI_API __declspec(dllexport)
#else
#define HYCOMMONWINAPI_API __declspec(dllimport)
#endif
前面增加 #define HYCOMMONWINAPI_EXPORTS
其实这两种方法都是增加定义

方法3:在你的dll cpp文件中把
#define HYCOMMONWINAPI_EXPORTS
加在#include <接口文件.h>
的前面

方法4:右击dll工程 -- 属性,打开属性页,展开:配置属性 -- C++ --预处理器,在预处理器定义的最后面填入:_AFXEXT,再次编译则搞掂。

以上方法逐一试下,不知道能不能帮到你。另外这种问题最好去CSDN社区去问比较好,百度上牛X的人比较少,我就经常去CSDN。

DLL工程中生成的文件一般都有一个对dllexport和dllimport的宏声明。把要导出的变量和函数都列在dll的头文件中。
直接在你的exe工程中包含dll工程的头文件,并连接lib即可使用。

右键你的项目,选择添加引用,选择COM选项卡,点击浏览,然后选中你的rundll的文件,然后确定.

据我所知,最简单的调用DLL方式是导出时在def文件里面编号,使用时在链接选项里面添加xxx.h,xxx.lib文件路径,将xxx.dll文件放到debug下面,在工程中用到链接库中的函数的地方加上头文件xxx.h,出问题的机会很小,试一下

右键你的项目

需要在你的#include "xxxx.h"后增加
#pragma comment(lib, "xxxx.lib");
xxxx.lib在你编译d