NET COM 64 bit
От: lapkos  
Дата: 14.04.08 08:29
Оценка:
Всем привет.

Есть 32 битный COM EXE сервер. Для него я написал NET DLL плагин который
взаимодействует с сервером через interop.
На 32 битной ОС всё работает.
На 64 битной машине (у кастомера) плагина какбудто не существует. На данный момент я немогу
уточнить проблему и сказать на каком этапе возникает проблема взаимодействия так как
у меня сейчас 32-х разрядная машина (чуть позже смогу подебажить всё это дела на 64 битной).

Я слышал что при взаимодействии NET приложения и 32-х разрядного неуправляемого приложения
через интероп на 64 битной ОС возникуют большие проблемы.

Может кто сталкивался или знает где эта проблема обсуждается — буду рад получить любую информацию.

Заранее спасибо.
Re: NET COM 64 bit
От: Аноним  
Дата: 14.04.08 10:39
Оценка:
Здравствуйте, lapkos, Вы писали:

L>Я слышал что при взаимодействии NET приложения и 32-х разрядного неуправляемого приложения

L>через интероп на 64 битной ОС возникуют большие проблемы.

L>Может кто сталкивался или знает где эта проблема обсуждается — буду рад получить любую информацию.


Обзор проблем совместимости для 32-разрядных программ в 64-разрядных версиях Windows

В дополнение можно отметить что указатели в х64 стали 8 байт вместо 4.
Соответственно если при объявлении структур или сигнатур методов Interop, подразумевающих в качестве полей или параметров указатели, используется int (Int32) вместо IntPtr, проблем не миновать.
Re[2]: NET COM 64 bit
От: lapkos  
Дата: 14.04.08 12:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Обзор проблем совместимости для 32-разрядных программ в 64-разрядных версиях Windows


А>В дополнение можно отметить что указатели в х64 стали 8 байт вместо 4.

А>Соответственно если при объявлении структур или сигнатур методов Interop, подразумевающих в качестве полей или параметров указатели, используется int (Int32) вместо IntPtr, проблем не миновать.


Спасибо за ответ.
Насколько я понимаю наиболее простое решение — заставить приложение работать как 32-х битное.
А оно будет так работать (согласно информации полученной по вашей ссылке) при выполнении следующих условий:

• Эта программа имеет установленный бит ILONLY в сведениях заголовка.
• Эта программа была скомпилирована с помощью Microsoft .NET Framework 1.1.
Если данная программа не имеет установленного бита ILONLY в сведениях заголовка или если она была скомпилирована с помощью Microsoft .NET Framework version 2.0, эта программа будет запущена как «родная» 64-разрядная программа.


Моя программа имеет установленный бит ILONLY, но вот скомпилирована она была на Framework 2.0.
Что нужно сделать чтобы скомпилировать прогу на Framework 1.1?
Нельзя ли обойтись настройками проекта?
Re[3]: NET COM 64 bit
От: apps Россия  
Дата: 14.04.08 14:28
Оценка:
Здравствуйте, lapkos, Вы писали:

L>Нельзя ли обойтись настройками проекта?


Конечно можно...
Project\Properties\Build\Platform target = x86
Если нам не помогут, мы тоже никого не пощадим...
Re[4]: NET COM 64 bit
От: lapkos  
Дата: 15.04.08 06:37
Оценка:
Здравствуйте, apps, Вы писали:

A>Конечно можно...

A>Project\Properties\Build\Platform target = x86

ну насколько я понял этого недостаточно — всеравно приложение на 64 битной
ОС будет работать как родная, если верить поддержке Microsoft (ссылка на 2 поста выше).
Повторю ещё раз фразу оттуда:
Если данная программа не имеет установленного бита ILONLY в сведениях заголовка или если она была скомпилирована с помощью Microsoft .NET Framework version 2.0, эта программа будет запущена как «родная» 64-разрядная программа.

apps, вы с этим не согласны?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.