Почему 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 на ноутбуке. Это определенно является причиной, по которой на рабочем столе отображается указатель для указателей, в то время как ноутбук показывает в длину.
Теперь, почему он это делает? Процесс Devenv на обоих компьютерах выполняется под WoW64.
При запуске программы она использует COMLibrary64.dll на обоих компьютерах в соответствии с Process Monitor. Таким образом, проблема, кажется, только во время добавления ссылки.
Далее попробуем выполнить генерацию взаимодействия вручную.