为什么我不能用__declspec(dllexport)的到的DllGetClassObject()从COM DLL导出?
-
27-09-2019 - |
题
下面是我声明:
extern "C" HRESULT __declspec(dllexport) __stdcall DllGetClassObject(REFCLSID rclsid,
REFIID riid, void** ppv)
但我一直收到此错误:
error C2375: 'DllGetClassObject' : redefinition; different linkage
所以我尝试检查的DllGetClassObject定义的所有发生。由此发现在 OBJBASE.H 强>
以下一个STDAPI DllGetClassObject(__in REFCLSID rclsid, __in REFIID riid, __deref_out LPVOID FAR* ppv);
#define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
#define STDAPI extern "C" HRESULT __stdcall
根据 MSDN :<
要导出函数,所述 __declspec(dllexport)关键字必须出现在左边的 调用约定关键字,如果
但我的声明之前提到的只是没有工作。
更新1
我测试我的声明与一个不同的方法的名称,如下所示:
extern "C" HRESULT __declspec(dllexport) __stdcall f()
{
return S_OK;
}
和该方法被成功地导出。因此,这些说明符可以一起使用。
解决方案
#pragma comment( linker, "/export:DllGetClassObject=_DllGetClassObject@12" )
#pragma comment( linker, "/export:DllGetClassObject" )
其他提示
它不编译,因为在OBJBASE.H原始声明没有足够的__declspec(dllexport)的属性。你不能在定义添加。迈克尔表明你该怎么做了一番。
我要出去的肢体,并说是的。
即使Visual Studio 2008的自动生成ATL COM的.dll项目.DEF文件。
不隶属于 StackOverflow