Как мне назвать нативную DLL, распространяемую как в 32-битной, так и в 64-битной форме? - PullRequest
3 голосов
/ 05 марта 2010

У меня есть коммерческий продукт, который представляет собой DLL (нативный 32-битный код), и теперь пришло время создать его 64-битную версию. Поэтому при установке в 64-разрядной версии Windows 32-разрядная версия переходит в Windows \ SysWOW64, а 64-разрядная версия переходит в ... Windows \ System32! (Я кусаю свой язык здесь ...) Или библиотеки DLL могут быть установлены вместе с клиентским приложением.

Что я должен назвать 64-битной DLL?

То же имя, что и у 32-битного: два файла, которые делают одно и то же, имеют одно и то же имя, но не являются взаимозаменяемыми Разве это не рецепт путаницы и проблем с поддержкой?

Различные имена (например, product.dll и product64.dll): теперь клиентские приложения должны знать, работают ли они 32-разрядные или 64-разрядные, чтобы ссылаться на мою DLL, и есть языки, где это неизвестно до времени выполнения .NET является лишь одним примером. И теперь все статически скомпилированные клиенты должны обусловить объявления импорта: IF target = WIN64 THEN импортировать Blah из "product64.dll" ELSE импортировать Blah из "product.dll" ENDIF

Продукт содержит огромное количество C-кода и большой кусок C ++ - его перенос на C # невозможен.

Обратить? Предложения?

Ответы [ 3 ]

2 голосов
/ 07 ноября 2015

Клиентские приложения не должны "знать", что они 32-разрядные или 64-разрядные.ОС автоматически загружает библиотеки DLL из соответствующего расположения, поскольку невозможно загрузить 32-разрядную библиотеку DLL в 64-разрядный процесс и невозможно загрузить 64-разрядную библиотеку DLL в 32-разрядный процесс.32-битное приложение пытается загрузить что-то из system32, ОС автоматически переадресует его в каталог SysWow64, заставив 32-битную версию загрузить.весь механизм.Механизм, созданный специально для того, чтобы вы могли использовать одно и то же имя.

1 голос
/ 05 марта 2010

Почему бы не поставить префикс dll с подчеркиванием ... например, product_32.dll и product_64.dll ? ИЛИ указал это с помощью префикса платформы - product_x86_32.dll и product_x86_64.dll ? По крайней мере, это очистит путаницу именования DLL ... Как вы думаете?

0 голосов
/ 29 апреля 2010

Я решил последовать примеру Microsoft, которые сохранили те же имена для DLL в System32, когда они перешли на 64-разрядную версию.На Win7 / 64 System32 \ avicap32.dll - это 64-битная DLL!

Существует некоторая потенциальная путаница для меня и моих клиентов с 32-битными и 64-битными DLL с одинаковым именем.Однако я думаю, что было бы хуже, если бы все мои клиенты делали свой код чувствительным к ширине слова.Особенно разработчикам .NET, которые часто могут оставить свою целевую платформу на «AnyCPU».

...