导出DLLRegisterServer接口遇到的问题
2016-07-13 11:56
246 查看
I'm trying to add DLLRegisterServer and DLLUnregisterServer entry points to an existing DLL that is exporting other functions. I have the olectl.h header included and here is the code I'm using to export the functions
EXTERN_C _declspec(dllexport) HRESULT STDAPICALLTYPE DllRegisterServer(void);
EXTERN_C _declspec(dllexport) HRESULT STDAPICALLTYPE DllUnregisterServer(void);
And here are the errors I get:
1> : error C2375: 'DllRegisterServer' : redefinition; different linkage
1> C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\olectl.h(419) : see declaration of 'DllRegisterServer'
1> : error C2375: 'DllUnregisterServer' : redefinition; different linkage
1> C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\olectl.h(420) : see declaration of 'DllUnregisterServer'
Can anyone tell me what I'm doing wrong with these exports?
【解决方法】
You'll have to define them (not declare them) in a source code file that doesn't #include <olectl.h>. However, COM components usually use a .def file to export entries since there are only four of them. That allows you to omit the __declspec and avoid the error. Make it look like this:
EXPORTS
DllCanUnloadNow @1 PRIVATE
DllGetClassObject @2 PRIVATE
DllRegisterServer @3 PRIVATE
DllUnregisterServer @4 PRIVATE
EXTERN_C _declspec(dllexport) HRESULT STDAPICALLTYPE DllRegisterServer(void);
EXTERN_C _declspec(dllexport) HRESULT STDAPICALLTYPE DllUnregisterServer(void);
And here are the errors I get:
1> : error C2375: 'DllRegisterServer' : redefinition; different linkage
1> C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\olectl.h(419) : see declaration of 'DllRegisterServer'
1> : error C2375: 'DllUnregisterServer' : redefinition; different linkage
1> C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\olectl.h(420) : see declaration of 'DllUnregisterServer'
Can anyone tell me what I'm doing wrong with these exports?
【解决方法】
You'll have to define them (not declare them) in a source code file that doesn't #include <olectl.h>. However, COM components usually use a .def file to export entries since there are only four of them. That allows you to omit the __declspec and avoid the error. Make it look like this:
EXPORTS
DllCanUnloadNow @1 PRIVATE
DllGetClassObject @2 PRIVATE
DllRegisterServer @3 PRIVATE
DllUnregisterServer @4 PRIVATE
相关文章推荐
- 漂亮灵活设置的jquery通知提示插件toastr
- linux常用命令个人笔记
- 信息系统项目管理师考试心得
- Firebase 相关
- 印刷机输纸故障分析
- linux学习:ls命令说明
- 程序员面试宝典--8.3循环和数组 zigzag编码
- Linux客户端与服务器相互实现聊天功能
- linux下TCP连接
- JavaScript如何获取/计算页面元素的offset?
- Java代码中获取Json的key值
- 同步直播(1):什么是空间度量以及统计?
- mysql启动读取数据库配置文件爆:对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾
- HDOJ-1102 Constructing Roads(最小生成树)两种做法
- OpenJ_Bailian——4115鸣人和佐助(带状态的A*)
- Python基本数据类型
- C# 同步两个ListBox滚动条
- Move VMDK files to different datastores using vSphere web client
- Es6初尝试
- HDU-1045 Fire Net(DFS+回溯)