Tux*_*Tux 6 c++ linker dllimport linker-errors visual-c++
我有一个DLL,我想使用它的一些功能.
#include <iostream>
using namespace std;
extern "C" __declspec(dllimport) int Initialize(char* localPort, char* adminServerName, int rpcTimeout);
int main()
{
int res = Initialize("7864", "6000@kabc", 10000);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我没有DLL的.lib文件,所以无论如何我可以链接到它.我想到的一件事是使用LoadLibrary函数,然后使用GetProcAddress().还有其他方法吗?
当我编译以下代码时
错误LNK2019:函数_main中引用的未解析的外部符号_ imp _Initialize
致命错误LNK1120:1个未解析的外部因素
我得到了上述错误
我正在使用Windows和Visual Studio 2008
从你的措辞来看,很明显你正在使用 Dev Studio 的某个或其他版本。
为了隐式链接 dll,VC++需要一个 .lib 文件,毫无疑问。如果没有 .lib,您只能使用 LoadLibrary 和 GetProcAddress 显式加载 dll。
幸运的是,导入库只包含 dll 的导出符号,因此在 VC++ 中简单地创建一个导出相同符号的 dll 项目、构建它,然后使用生成的 .lib 文件来访问目标 dll 是完全合法的。
真正的诀窍在于,正确使用符号:根据原始 dll 的创建方式,可能需要处理一些修饰。
使用dependencywalker查看时,可以通过多种方式从 dll 导出“Initialize”
extern "C" __declspec(dllexport) int __cdecl Initialize(...
extern "C" __declspec(dllexport) int __stdcall Initialize(...
问题确实是第一种情况 - 如果调用约定不是 __cdecl (并且大多数 dll api 实际上是 __stdcall - 所有 Windows dll 都是 __stdcall),那么您必须使用 .def 文件来导出未修饰的名称。
归档时间: |
|
查看次数: |
8645 次 |
最近记录: |