为什么我不能用__declspec(dllexport)的到的DllGetClassObject()从COM DLL导出?

StackOverflow https://stackoverflow.com/questions/3460533

  •  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文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top