我正在尝试使用以下标题加载一个假设的插件:
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
class DLLIMPORT DllClass
{
public:
virtual ~DllClass(void);
static DllClass* getPCFilter();
virtual int Process(int a, int b);
protected:
DllClass();
};
#endif /* _DLL_H_ */
我的主机代码确实:
HINSTANCE hinstDLL;
hinstDLL = LoadLibrary(L"PCFilter.dll");
if(hinstDLL)
{
typedef DllClass*(*Factory)();
Factory fun1;
fun1 = (Factory)GetProcAddress(hinstDLL, "DllClass::getPCFilter");
dll 打开,但 GetProcAddress 未找到静态工厂方法。我不应该这样做吗?
我已经尝试摆脱静态方法,而是在类声明之后执行以下操作:
extern "C" DLLIMPORT void* getPCFilterInstance()
{
return (void*)new DllClass();
}
但是,在编译主机源代码时,链接器会抱怨:
In function `getPCFilterInstance'::
[Linker Error] undefined reference to `_imp___ZN8DllClassC1Ev'
我可以通过链接到 .a 库来解决这个问题。但是DLL的想法不是不需要在编译时链接吗?