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.

Подскажите, пожалуйста, что не так с моим кодом?

Ответы на вопрос(1)

Ваш ответ на вопрос