Почему Visual Studio иногда превращает ОДИНАКОВЫЕ параметры указателя в COM-библиотеках в uint, а иногда в ulong? У меня есть COM-библиотека, в которой есть несколько методов с такими параметрами, как
[ in ] ULONG_PTR ParentWindow
Когда я обращаюсь к этой библиотеке на своем настольном компьютере, сборка взаимодействия превращает ULONG_PTR в uint. Когда я делаю то же самое на своем ноутбуке, он превращается в ulong. Это вызывает проблемы при совместном использовании проекта между машинами. Я, вероятно, мог бы хранить сборку Interop в SVN вместе с остальной частью проекта, но это вызывает проблемы, если мне когда-нибудь понадобится ее повторно сгенерировать, например, после обновления библиотеки COM.
Системы:
Desktop Laptop - Windows Vista Professional 64-bit - Windows 7 Ultimate 64-bit - Visual Studio 2008 Professional - Visual Studio 2008 Team System (SP1) Development Edition (SP1) - .Net Framework 3.5 SP1 - .Net Framework 3.5 SP1
UAC включен, а Visual Studio запущена от имени администратора.
Я попробую применить Visual Studio 2008 SP1 на ноутбуке, если это повлияет.
Изменить: применил SP1 на ноутбуке безрезультатно.
Обновление:
При добавлении ссылки на библиотеку COM в Visual Studio Process Monitor показывает, что devenv читает COMLibrary.dll на настольном компьютере, в то время как он читает COMLibrary64.dll на ноутбуке. Это определенно является причиной того, что рабочий стол показывает uint для указателей, а ноутбук показывает ulong.
Теперь, почему он делает это? Процесс Devenv на обоих компах запущен под WoW64.
При запуске программа использует COMLibrary64.dll на обоих компьютерах согласно Process Monitor. Таким образом, проблема кажется только во время добавления ссылки.
Далее постараюсь выполнить генерацию взаимодействия вручную.