Я получаю следующую ошибку компилятора: Ошибка компилятора «идентификатор» C2491: определение функции dllimport не разрешено
Нижеследующий код не работает только потому, что определение шаблона находится вне класса, если я помещу определение в класс, компиляция будет в порядке.
Чего я хочу добиться, так это иметь определение вне класса, возможно ли это?
Вот заголовок и исходный файл внутри проекта DLL (определяет COMPILE_DLL __declspe c (dllexport)):
DLLHeader.h
#pragma once
// DLL export/import symbols
#ifdef COMPILE_DLL
#define DLL_API __declspec(dllexport)
#elif defined (LINK_DLL)
#define DLL_API __declspec(dllimport)
#endif
template<typename T>
class DLL_API FromDLL
{
public:
~FromDLL();
};
// error C2491: 'FromDLL<T>::~FromDLL': definition of dllimport function not allowed
// no error if definition put inside class
template<typename T>
FromDLL<T>::~FromDLL()
{
}
DLLSource. cpp
#include "DLLHeader.h"
// Explicit intantation for DLL export
template class DLL_API FromDLL<int>;
А вот код клиента, который использовал DLL (определяет LINK_DLL __declspe c (dllimport))
Клиент. cpp
#define LINK_DLL
#include "DLLHeader.h"
int main()
{
FromDLL<int> instance;
// EDI: I also want to reuse template code
FromDLL<float> instance;
}