Re[3]: DllImport функции на платформе x86_64
От: Mab Россия http://shade.msu.ru/~mab
Дата: 11.12.07 08:23
Оценка: +2
Здравствуйте, robot01, Вы писали:

R>Это конечно решение но хочется что бы все было прекрасно, а приведение типов мне прекрасным не кажется.

Т.е. это значение -- вовсе не указатель, а настоящее числовое значение? Если так, то не ясно, зачем так сделано. Логичнее было бы использовать на unmanaged стороне тип с фиксированной разрядностью.
DllImport функции на платформе x86_64
От: robot01  
Дата: 11.12.07 08:07
Оценка:
Предположим что есть некая библиотека написанная на C и скомпилированная для двух платформ x86 и x86_64, библиотека имеет функцию вида:
void test(long some_value)
Хочется вызывать эту библиотеку из .net приложения. Засада в том что размер длинного целого на платформе x86 будет 32 бита а на x86_64 64 бита. Думаю я что умные люди уже что то придумали на этот счет но найти ума не хватило.
Буду благодарен за подсказку.
Re: DllImport функции на платформе x86_64
От: Mab Россия http://shade.msu.ru/~mab
Дата: 11.12.07 08:09
Оценка:
Здравствуйте, robot01, Вы писали:

Используйте IntPtr при маршаллинге.
Re[2]: DllImport функции на платформе x86_64
От: robot01  
Дата: 11.12.07 08:21
Оценка:
Здравствуйте, Mab, Вы писали:

Mab>Здравствуйте, robot01, Вы писали:


Mab>Используйте IntPtr при маршаллинге.


Это конечно решение но хочется что бы все было прекрасно, а приведение типов мне прекрасным не кажется.
В любом случае спасибо за помощь.
Re[4]: DllImport функции на платформе x86_64
От: robot01  
Дата: 11.12.07 08:38
Оценка:
Здравствуйте, Mab, Вы писали:

Mab>Здравствуйте, robot01, Вы писали:


R>>Это конечно решение но хочется что бы все было прекрасно, а приведение типов мне прекрасным не кажется.

Mab>Т.е. это значение -- вовсе не указатель, а настоящее числовое значение? Если так, то не ясно, зачем так сделано. Логичнее было бы использовать на unmanaged стороне тип с фиксированной разрядностью.

Если рассматривать реальный пример то это битовая маска в которой хранятся всякие флажки. Я могу предположить почему разработчики библиотеки так поступили: они хотели что бы их библиотека была максимально доступна т.е. введи они какието структуры фиксированной длинны тогда разработчикам которые вызывают их библиотеку не из C программы (мне например) было бы гораздо труднее жить. Но в любом случае библиотека это некая данность, менять интерфейс которой хоть теоретически возможно (исходники доступны) на практике не реально.
Re[5]: DllImport функции на платформе x86_64
От: TK Лес кывт.рф
Дата: 11.12.07 12:49
Оценка:
Здравствуйте, robot01, Вы писали:

R>Если рассматривать реальный пример то это битовая маска в которой хранятся всякие флажки. Я могу предположить почему разработчики библиотеки так поступили: они хотели что бы их библиотека была максимально доступна т.е. введи они какието структуры фиксированной длинны тогда разработчикам которые вызывают их библиотеку не из C программы (мне например) было бы гораздо труднее жить. Но в любом случае библиотека это некая данность, менять интерфейс которой хоть теоретически возможно (исходники доступны) на практике не реально.


Даже если исходники недоступны то, всегда можно написать свой адаптер который, приведет интерфейс библиотеки к более приемлемому виду.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[5]: DllImport функции на платформе x86_64
От: _FRED_ Черногория
Дата: 11.12.07 13:41
Оценка:
Здравствуйте, robot01, Вы писали:

R>Если рассматривать реальный пример то это битовая маска в которой хранятся всякие флажки.


И что, в этом платформенно-зависимом long-е может находится разное количество флагов, которое по-разному обрабатывается при разных разрядностях
Help will always be given at Hogwarts to those who ask for it.
Re[6]: DllImport функции на платформе x86_64
От: robot01  
Дата: 11.12.07 15:10
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, robot01, Вы писали:


R>>Если рассматривать реальный пример то это битовая маска в которой хранятся всякие флажки.


_FR>И что, в этом платформенно-зависимом long-е может находится разное количество флагов, которое по-разному обрабатывается при разных разрядностях


Нет обрабатывается все одинаково, просто при 64 битной размерности верхнее двойное слово игнорируется. Не спрашивайте меня зачем оно все так, это выше моего понимания, думаю я таков дзен программирования на C.
Re: DllImport функции на платформе x86_64
От: robot01  
Дата: 11.12.07 15:15
Оценка:
Здравствуйте, robot01, Вы писали:

R>Предположим что есть некая библиотека написанная на C и скомпилированная для двух платформ x86 и x86_64, библиотека имеет функцию вида:

R>void test(long some_value)
R>Хочется вызывать эту библиотеку из .net приложения. Засада в том что размер длинного целого на платформе x86 будет 32 бита а на x86_64 64 бита. Думаю я что умные люди уже что то придумали на этот счет но найти ума не хватило.
R>Буду благодарен за подсказку.

Спасибо все кто пытался помочь. Решение для потомков — [MarshalAs(UnmanagedType.SysInt)]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.