我在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
答案 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();
虽然看起来你的问题有两个不同功能的点点滴滴!