Я записал библиотеку классов в C++ и успешно скомпилировал его в Linux с g ++ как общий объект, затем создал несколько приложений, которые используют его. Теперь я должен портировать его на VS2008. Я дал всем классам необходимое __ declspec (dllexport) префиксы, затем попытался скомпилировать его. Я получаю груду предупреждений, которые в основном имеют отношение:
Я считал людей, говорящих, что экспорт классов в DLL обычно является Плохой Идеей, что существует несметное число вещей, которые могут пойти не так, как надо, и теперь у меня есть голова, полная понятий как двоичная несовместимость, dll черт, несоответствия версии компилятора и т.д., и быть честным я не могу действительно понять его. Каков корректный, безопасный и простой способ создать общую библиотеку классов в Windows, затем?
Спасибо.
] Я поддерживаю [] библиотеку классов C++[], которая обычно используется как DLL в Windows, так что это можно сделать. Относительно ваших проблем:[
] []Этого не происходит в моей библиотеке. Возможно, Вам необходимо использовать опции сборки /MD и /MDd? Таким образом, ваша библиотека исполнения на C++ тоже идет из DLL, чем и славится VC++.[
][]Не используйте throww-specs. [] Они злые []. Если вы чувствуете, что все равно должны это сделать, просто поместите что-то подобное в заголовочный файл, который включает каждый модуль, прежде чем он попадет в код, использующий throww-specs.[
][] []]#pragma warning(disable: 4290)[
] [
] Сначала вы должны спросить себя, действительно ли вам нужна динамическая библиотека здесь. Статические библиотеки или даже лучше включить исходный код непосредственно в ваш проект - это хорошее решение, которое приходит без этих проблем. [
] [] Если вам действительно нужна DLL, то как я бы это сделал (учитывая много времени), так это обернул бы ваш класс в C-интерфейс. Затем вы можете воссоздать ваш старый интерфейс C++ как библиотеку только заголовков C++, которая взаимодействует только с вызовами C, экспортированными из DLL. Бонусной особенностью такого подхода является то, что будет тривиально использовать вашу библиотеку практически из любого языка программирования, так как импорт функций C из DLL высоко поддерживается.[
] []Другим способом будет использование COM, но так как вы портируете из Linux, это, вероятно, не вариант.[
].