Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.173] |
|
Сообщ.
#1
,
|
|
|
В DLL определены две функции:
template <typename T> void __declspec( dllexport ) SerializeArray(T &aP, CArchive& ar) { ... } template <typename T> void __declspec( dllexport ) CopyArray(T &aP, T &aP2) { ... } В самой DLL обе функции работают без проблем. В программе, используещей эту DLL, работает только первая фунцкия, на вторую вылетает ошибка: error LNK2001: unresolved external symbol Подскажите, плиз, где ошибка? |
Сообщ.
#2
,
|
|
|
Ошибка в том, что для заданного типа первая функция инстанцирована в DLL (реально используется), а вторая нет.
|
Сообщ.
#3
,
|
|
|
Обе функции реально используются (вызываются) в DLL. Пробовал менять тип:
template <typename T2> void __declspec( dllexport ) CopyArray(T2 &aP, T2 &aP2) { ... } - ничего не изменилось. Расскажи подробнее, что значит "инстанцирована"? |
Сообщ.
#4
,
|
|
|
это значит, что первую в длл ты где-то вызываешь с такими же параметрами шаблона, как и при вызове из длл.
а вторую - нет. предположим, в длл ты где-то в нутрях делаешь такой вызов: int val1 = 0; SerializeArray(val1, ar); // в длл создался код ф-ции, работающий с int short val2 = 0; SerializeArray(val2, ar); // в длл создался код ф-ции, работающий с short а в .ехе-шнике делаешь так: int val1 = 0; SerializeArray(val1, ar); // вызывается код из длл для работы с int short val2 = 0; SerializeArray(val2, ar); // вызывается код из длл для работы с int char val2 = 0; SerializeArray(val2, ar); // а такого кода в длл нет :blink: , потому что не проинициализированна ф-ция именно поэтому шаблонные ф-ции не экспортируют, а описывают прямо в заголовочном файле. |
Сообщ.
#5
,
|
|
|
Цитата это значит, что первую в длл ты где-то вызываешь с такими же параметрами шаблона, как и при вызове из длл. а вторую - нет. Ну, не знаю. По-разному пробовал. Вызывал в ЕХЕ и с теми же параметрами, что и в DLL... Цитата именно поэтому шаблонные ф-ции не экспортируют, а описывают прямо в заголовочном файле. Понятно, спасибо. |