C ++ создает экземпляр класса шаблона из DLL
Я попытался сделать DLL, которая содержит:
базовый шаблон класса, только с виртуальным деструктором и без атрибутов (Я назвал это MatrixInterface)
a производный класс с конструкторами, деструктором, operator = и атрибутами (класс матрицы)
функция, которая возвращает указатель базового класса на новый производный объект:
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport)
#else
#define DLL_EXPORT __declspec(dllimport)
#endif
template<class T>
MatrixInterface<T> DLL_EXPORT * CreateMatrixInstance(unsigned int n,unsigned int m)
{
return new matrix<T>(n,m);
}
Я хотел установить матричный класс в моей программе, используя эту функцию, но я не могу назначить указатель на функцию и не понимаю почему. Таким образом, я могу загрузить любую функцию, которая не является шаблонной функцией.
#include <windows.h>
#include <iostream>
using namespace std;
template<class T>
class MatrixInterface
{
public:
virtual ~MatrixInterface(void);
};
typedef MatrixInterface<int>* (*Fptr)(unsigned int,unsigned int);
int main(int argc, char* argv[])
{
Fptr p;
MatrixInterface<int> *x;
char path[]="basicmatrix.dll";
HINSTANCE hDll = LoadLibrary(path);
cout<<(char*)path<<endl;
if(hDll)
{
cout<<"Library opened succesfully!"<<endl;
p = (Fptr)GetProcAddress(hDll,"CreateMatrixInstance");
if(p) {
cout<<"working!\n";
x=p(7,8);
cout<<"MatrixCreated"<<endl;
delete x;
} else {
cout<<"Failed loading function CreateMatrixInstance\n";
}
}
else
{
cout<<"Failed loading library "<<(char*)path<<endl;
}
system("pause");
FreeLibrary(hDll);
return 0;
}
базовый класс присутствует как в DLL, так и в исполняемом файле.
По какой-то причине Visual Studio не может открыть DLL-библиотеку (скомпилированную с помощью MSVC или MinGW). Я скомпилировал программу с MinGW, и она загружает файл .dll.
Подскажите, пожалуйста, что не так с моим кодом?