VC ++ / Dev-C ++:如何包含DLL?

时间:2011-08-30 03:05:49

标签: windows visual-c++ dll dev-c++

我在Delphi中编写了一个导出函数的DLL。我想在不使用动态链接(LoadLibrary()API-Call)的情况下在C ++程序中使用这些函数。

“import”声明将是

extern "C" int __stdcall getVersionNumber();

我主要使用Bloodshed Dev-C ++来创建Windows可执行文件。但我不知道如何告诉编译器它应该从“STATMONDLL32.dll”导入函数“getVersionNumber”。

我通过谷歌搜索问题花了很多时间,没有任何结果(只有奇怪的东西写的.a文件和.lib文件,我没有由Delphi编译......)我也安装了VC ++,但即使在那里,我也找不到告诉编译器使用特定DLL的方法。

我为这个DLL创建了一个DEF文件 - 我如何告诉Dev-C ++和/或VC ++使用它? (Dev-C ++首选)

//编辑:Delphi正在创建UNDECORATED符号。符号正好是“getVersionNumber”。

我创建了以下带有装饰别名的DEF文件:

LIBRARY   STATMONDLL32
EXPORTS
  getVersionNumberA = _getVersionNumberA@0

我用VC ++“lib.exe”创建了一个* .lib文件:

lib.exe /DEF:StatMonDll32.def /OUT:StatMonDll32.lib

我已将lib包含在VC ++链接器设置中。

但VC ++告诉我它无法解析外部符号_getVersionNumberA @ 0!请帮忙!

//编辑:我在这里上传了DLL:http://www.viathinksoft.de/temp/StatMonDll32.dll。你能用VC ++访问符号getVersionNumberA吗?我正在寻找解决方案,因为现在6天了:' - (

祝你好运

Daniel Marschall

1 个答案:

答案 0 :(得分:0)

你可以使用动态链接,它应该按照以下方式工作:

extern "C" typedef int (__stdcall *pfnadd)(int a, int b);
extern "C" typedef int (__stdcall *pfngetversion)(void);
HMODULE mod = LoadLibraryA("mydll.dll");
pfnadd add = (pfnadd)GetProcAddress(mod, "Add");
pfngetversion getVersionNumberA =
       (pfngetversion)GetProcAddress(mod, "getVersionNumberA");

然后你可以使用函数指针调用:

add(1, 2);
std::cout << getVersionNumberA();

虽然看起来你的问题有两个不同功能的点点滴滴!