Экспорт шаблона класса из библиотеки C ++ в VB.NET и C #

У меня следующая проблема: я создал DLL в C ++ с определением класса шаблона следующим образом:

 template <class T>
class myClass {
public:
//! Constructor
myClass(int size = 10);

//! Destructor
~myClass();

someAttributes ... ;
}

Я хочу экспортировать его, поэтому я определил следующее:

   template class __declspec(dllexport) myClass<double>;

потому что — я читал — в Visual C ++ вы не можете экспортировать шаблон, а только их явную инициализацию.
Таким образом, все работает нормально, и я могу импортировать DLL в новый код Visual C ++.
Теперь: нужно ли экспортировать явное создание экземпляров для каждого нужного мне типа (myClass, myClass и т. Д.)? Или есть лучший способ — менее наивный — сделать это?
Как я могу импортировать мой шаблонный класс в проект VB.NET? Есть ли способ? Или мне нужно создать структуру маршалинга и затем преобразовать ее в мой шаблонный класс во время выполнения?

Спасибо вам всем!

0

Решение

Вам нужно будет экспортировать явный экземпляр типа вашего шаблона для каждого типа, который вы хотите использовать. Кроме того, вы может быть Вы должны вызывать каждый метод, который хотите явно использовать из своего кода C ++, хотя бы один раз, чтобы включить объектный код для него в библиотеку.

Причина этого заключается в том, что код шаблона не является кодом, который будет легко скомпилирован в ваши объектные файлы (или dll). Компилятор сгенерирует требуемый (и обычно только требуемый) код во время компиляции вашей программы. Если ваш код C ++ никогда не использует шаблонный класс, компилятор просто игнорирует шаблон вообще. То же самое верно для методов вашего шаблонного класса. Если вы не используете его, компилятор может игнорировать его.

Суть в том, что использование шаблонного кода для библиотек, предназначенных для использования на других языках, обычно не очень хорошая идея …

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector