__declspec(dllimport)与(dllexport)以为有什么区别,但无论声明是哪一个,或者在调用的时候故意指定不同的方式,调用都可以成功。
当动态链接库没有使用extern "C"的时候,使用Dependency 查看的时候为?Test@@YAXXZ。这个时候使用LoadLibray("xx")-GetProcAddress()-FreeLibaray()是不能成功调用函数的。无法找到函数的入口地址。只能通过lib +头文件 或lib+extern 函数原型的方式调用。
加上extern "C"后,函数形式为 Test 非常的整洁。此时可以使用多种方法成功调用。
------------------------------------------------------------------------------------
如何从dll文件导出对应的lib文件?
Visual C++ 开发工具提供了两个命令行工具,一个是dumpbin.exe,另一个是lib.exe。利用这两个工具即可从dll导出其对应的lib。
1、在命令行执行:
dumpbin /exports yourdll.dll > yourdll.def
2、编辑 yourdll.def 文件,使之格式与.def文件格式一致。比如:
EXPORTS;
fn1;
fn2;
3、在命令行执行:
lib /def:yourdll.def /machine:i386 /out:yourdll.lib