C++ C++;|DLL/EXE-如何从导出的类调用另一个类方法?
我有一个项目,我想使用DLL 我正在将factory函数导出到我的exe中:C++ C++;|DLL/EXE-如何从导出的类调用另一个类方法?,c++,class,inheritance,dll,exe,C++,Class,Inheritance,Dll,Exe,我有一个项目,我想使用DLL 我正在将factory函数导出到我的exe中: extern "C" __declspec(dllexport) BaseInit* __cdecl CreateInterface( void ) { return new Initializer; } 这很好用。在我的Init类中,我有一个方法来创建另一个类,我想从我的初始值设定项类方便地使用它: class IAnotherClass { public: virtual void TestF
extern "C" __declspec(dllexport)
BaseInit* __cdecl CreateInterface( void )
{
return new Initializer;
}
这很好用。在我的Init类中,我有一个方法来创建另一个类,我想从我的初始值设定项类方便地使用它:
class IAnotherClass {
public:
virtual void TestFunction();
...
class AnotherClass : public IAnotherClass {
public:
void TestFunction();
...
class Initializer : public BaseInit
{
IAnotherClass* Create(void)
{
return new AnotherClass;
}
...
这似乎也奏效了。我得到一个非空指针。但是,当尝试从此类(在我的exe程序中)调用TestFunction时,我得到:
LNK2001未解析外部符号“公共:虚拟无效\uuuu cdecl”
另一个类::TestFunction(void)”
(?TestFunction@AnotherClass@@UEAAXXZ)
void AnotherClass::TestFunction
-正文在我的DLL项目中的单独.cpp-文件中
我做错了吗?我实际上需要为每个不同的类实例使用单独的工厂函数?甚至可以这样做吗?您需要将
\uu declspec(dllexport)
添加到您希望在dll之外可用的每个类和函数中,只要导出包含的类,就不需要标记方法
注意:在类中,declspec介于class
和类名之间:
class __declspec(dllexport) Exported
{
};
您还需要定义一个宏,根据您是在构建dll还是exe,在\u declspec(dllexport)
和\u declspec(dllimport)
之间切换标头,例如:
#ifdef BUILDING_MYDLL
#define MYDLL_EXPORT __declspec(dllexport)
#else
#define MYDLL_EXPORT __declspec(dllimport)
#endif
class MYDLL_EXPORT Exported
{
};
您是否正在链接到使用dll创建的导入库?
extern“C”\uuuudeclspec(dllexport)
通常,您需要一个宏在\uuudeclspec(dllexport)
和\uuudeclspec(dllimport)
之间切换,具体取决于您是在构建dll还是在使用它。@drescherjm我不是在创建导入库,我正在链接。或者至少试着去做。它适用于CreateInterface,然后是Initializer::Create,但访问另一个类方法实际上会引发未解析的外部错误。我是否也需要uu declspec(dllexport)另一个类/另一个类?这是最接近正确的答案,我实际上也有一些头问题,导致无法解决外部问题,我的DLL实际上没有导出一些函数,因为这一点。标记为已解决。