`
xitong
  • 浏览: 6187705 次
文章分类
社区版块
存档分类
最新评论

dll添加.def文件与直接在需要导出的函数定义处指定_declspec( dllexport )有区别吗?

 
阅读更多
为dll添加.def文件与直接在需要导出的函数定义处指定_declspec( dllexport )有区别吗?如果有是什么区别?

我发现在outdll.c中这样指定:
__declspec( dllexport ) HRESULT DllGetClassObject (REFCLSID rclsid, REFIID riid, void **ppv)
会产生编译错误:
1>------ Build started: Project: outside, Configuration: Debug Win32 ------
1>Compiling...
1>outdll.c
1>d:\outside-cf\outside\outdll.c(19) : error C2375: 'DllGetClassObject' : redefinition; different linkage
1> c:\program files\microsoft visual studio 8\vc\platformsdk\include\objbase.h(833) : see declaration of 'DllGetClassObject'
1>Build log was saved at "file://d:\outside-cf\outside\Debug\BuildLog.htm"
1>outside - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ==========

c2375的解释意思是出错的函数使用的链接指示符与之前声明的不同。
Compiler Error C2375
'function' : redefinition; different linkage

The function is already declared with a different linkage specifier.

objbase.h中声明了DllGetClassObject()函数:
STDAPI DllGetClassObject(IN REFCLSID rclsid, IN REFIID riid, OUT LPVOID FAR* ppv);

而使用.def文件就没有问题。

分享到:
评论

相关推荐

    MingW VC 之.a .lib .dll .def 关系

    也可以在MinGW上直接调用 pexports mylib.dll > mylib.def (这就是MinGW的方便之处了) 2. 生成lib 需要mylib.dll和mylib.def lib /machine:ix86 /def:mylib.def 这样就会生成mylib.lib和mylib.exp两个文件。(mylib....

    反编译DLL文件为.CPP工具

    此时使用 __declspec(dllexport) 导出 ——不能指定导出序号。  3.如果是 NONAME 或者 C _CDECL 方式导出(比如 DEF 导出,大多数Windows DLL都是这种情况,比如WS2_32等等),则使用#pragma comment(linker, "/...

    自己写的dll的简介

    为所有的类声明加上__declspec(dllexport)关键字,这有这样编译器才能自动为你产生引入库文件(否则你需要自己写.def文件来产生,因为不常用所以在此不再阐述其细节) 对于DLL的用户来讲,类声明就需要用另外一个...

    如何用VC++创建及调用DLL

    如果使用“__stdcall”调用方式,可能产生C不识别的修饰名,所以设置导出函数时要采用.def文件形式,而不是__declspec(dllexport)形式。后者会进行修饰名转换,C语言无法识别函数。 下面的代码是一个定义文件的示例...

    VS2010生成动态链接库的第二种方式

    以.def文件(模块定义文件)方式导出函数(非_declspec(dllexport)方式导出函数),VS2010生成动态链接库,详见博文:http://blog.csdn.net/fightingforcv/article/details/41773391

    VS2010中使用C++创建和使用DL.docx

    1.生成动态链接库(_declspec(dllexport)方式导出函数) 2.生成动态链接库(以.def文件(模块定义文件)方式导出函数) 3.以加载时动态链接方式调用DLL 4.以运行时动态链接方式调用DLL 5.以模块定义方式(.def文件)...

    AheadLib源代码

    此时使用 __declspec(dllexport) 导出 ——不能指定导出序号。  3.如果是 NONAME 或者 C _CDECL 方式导出(比如 DEF 导出,大多数Windows DLL都是这种情况,比如WS2_32等等),则使用#pragma comment(linker, "/...

    C++Builder调用vs2010演示代码

    #define DLL_API extern "C" _declspec(dllexport) #else #define DLL_API extern "C" _declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif DECLDIR int __stdcall InitKpHttp(void); ...

    hf_ctp_c_proxy:最新版本已合并到 hf_ctp_py_proxy

    将原DLL中无法访问到的函数暴露出来供上层应用调用.##封装中的要点__declspec(dllexport) 表明函数为导出函数* `extern "C"` 导出的函数名与声明一致,否则导出函数名无法正常使用 当然,也可以通过定义`.def`文件实现...

    VC++动态链接库DLL操作实例

    内容索引:VC/C++源码,界面编程,动态链接库 ... 如何使用关键字_declspec (dllexport)导出函数  如何显式链接DLL  如何隐式链接DLL  如何在DLL中共享数据  如何在MFC扩展DLL中导出类  如何在DLL中使用对话框资源

    网狐6.6 服务器源代码 & 共享组件 & 数据库 (5)

    #define KERNEL_ENGINE_CLASS _declspec(dllexport) #else #define KERNEL_ENGINE_CLASS _declspec(dllimport) #endif #endif //模块定义 #ifndef _DEBUG #define KERNEL_ENGINE_DLL_NAME TEXT(...

    网狐6.6 服务器源代码 & 共享组件 & 数据库 (3)

    #define KERNEL_ENGINE_CLASS _declspec(dllexport) #else #define KERNEL_ENGINE_CLASS _declspec(dllimport) #endif #endif //模块定义 #ifndef _DEBUG #define KERNEL_ENGINE_DLL_NAME TEXT(...

    网狐6.6 服务器源代码 & 共享组件 & 数据库 (7)完毕

    #define KERNEL_ENGINE_CLASS _declspec(dllexport) #else #define KERNEL_ENGINE_CLASS _declspec(dllimport) #endif #endif //模块定义 #ifndef _DEBUG #define KERNEL_ENGINE_DLL_NAME TEXT(...

    网狐6.6 服务器源代码 & 共享组件 & 数据库 (6)

    #define KERNEL_ENGINE_CLASS _declspec(dllexport) #else #define KERNEL_ENGINE_CLASS _declspec(dllimport) #endif #endif //模块定义 #ifndef _DEBUG #define KERNEL_ENGINE_DLL_NAME TEXT(...

    网狐6.6 服务器源代码 & 共享组件 & 数据库(1)

    #define KERNEL_ENGINE_CLASS _declspec(dllexport) #else #define KERNEL_ENGINE_CLASS _declspec(dllimport) #endif #endif //模块定义 #ifndef _DEBUG #define KERNEL_ENGINE_DLL_NAME TEXT(...

    网狐6.6 服务器源代码 & 共享组件 & 数据库 (4)

    #define KERNEL_ENGINE_CLASS _declspec(dllexport) #else #define KERNEL_ENGINE_CLASS _declspec(dllimport) #endif #endif //模块定义 #ifndef _DEBUG #define KERNEL_ENGINE_DLL_NAME TEXT(...

Global site tag (gtag.js) - Google Analytics