Библиотеки типов, конечно же, были предназначены для агностики платформы в большинстве случаев. Большинство из тех, с которыми вы столкнулись при программировании Windows, которые были отправлены Microsoft. Наиболее заметен в .NET, который позволяет очень просто писать код, который может работать либо в 32-битном, либо в 64-битном режиме, отображаемом целевым объектом платформы AnyCPU. Ничего особенного не требуется, чтобы использовать классы interop в Microsoft.Office.Interop или писать расширения, которые запускаются внутри программы Office, вы используете те же библиотеки типов.
Но это не всегда так хорошо работает, когда вы используете библиотеку типов, созданную программистом, которая никогда не считала ее работой с 64-битным кодом. Наиболее типичная проблема вызвана аргументами метода, которые на самом деле являются указателями под капотом, но сплюснутыми до целостного типа, long является типичным выбором. Эти значения указателя имеют 64-разрядную ширину в 64-битном режиме и неверно работают при попытке записать их в 32-разрядное целое. Хорошим примером являются значения HANDLE.
К сожалению, наиболее печально, но это Microsoft. Библиотека типов для ADO была нарушена, библиотека поставщиков баз данных, которая широко используется для работы с dbase-двигателями. В Windows 7 с пакетом обновления 1 (SP1) произошли серьезные изменения, что вызвало всеобщее несчастье, когда программисты создали свои программы в этой операционной системе и выяснили, что больше не работают в старых версиях Windows.Это было иначе, тип, который должен был быть 32-разрядным в 64-битных операционных системах, но был объявлен 64-разрядным в 64-разрядной ОС. Вы можете увидеть это, если у вас есть файл заголовка Windows SDK версии 8, adoint_Backcompat.h, тип ADO_LONGPTR. Заменено long in adoint.h.
Лучше всего работать с оригинальным программистом, чтобы получить эту информацию. Или, чтобы воспользоваться суррогатами COM, они могут запускать 32-разрядный код вне процесса при вызове из 64-битного процесса.
Является ли COM каким-то методом связи между процессами, которые их изолируют? – Mikhail
COM сам нет. COM может быть в proc или из proc. DCOM - это недостаток вкуса. D предназначен для распределенного, либо отдельного процесса или машины, и запросов прокси через rpc. Таким образом, вы можете иметь 32-процессорный процесс, с которым вы можете подключиться через dcom. Dom является одним из вариантов реализации pic. Вероятно, хороший вариант в вашем случае. В этот момент вы решили проблему процесса и можете вернуться к проблеме типа lib. – dkackman
Это одно предложение должно быть «dcom - один из вариантов реализации ipc». Проклятый автокоррект и слишком много аббревиатур – dkackman