Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Маршаллинг констант,перечислений,структур из С dll, конвертнуть с++ библиотеку на .нет 
:(
    Опции темы
sashara
Дата 26.12.2008, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



У меня есть dll-библиотека, написанная на С. С ней в комплекте идет *.lib и *.h файлы.

Вопросы:

1. В *.h файле объявлено примерно 1000 констант, которые я хочу использовать из С#. Как мне правильно это реализовать ?

Код

#define const1        40
#define const2        80


Должен ли я вручную их переписывать ? Или это делается другим более хитрым способом ? или хитрого способа нет и все-таки вручную ?

2. Как правильно перегнать из *.h перечисление из C++ на С# ?

Код

typedef enum _ProjectionType
{
enum_const =0,
enum_const=4,
enum_const=99
}ProjectionType;


3. Как переписать для C# вот такую структуру:
Код

typedef struct
{
 char id[const1];
} 
ProdId;


4. Какие существуют ограничения на маршалинг структур и перечислений ?
PM MAIL   Вверх
archeg
Дата 26.12.2008, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Я не шарю спп, но могу точно сказать что #define-ы прийдеться переписывать. Ибо ты плохо читал доки по спп. Ибо дефайны - не константы. Это макрокоманды. Они выполняються на этапе компиляции - простая подстановка вместо const1 числа 40 и т.д. Значит в конечных дллках плюсов их уже просто не будет.
Для констант думаю в плюсах есть ключевое слово const
 
P.S. Тебе надо использовать дллину как либу, или переписать ее? Я что-то нпонял

Это сообщение отредактировал(а) archeg - 26.12.2008, 10:46


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
sashara
Дата 26.12.2008, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



Цитата(archeg @ 26.12.2008,  10:46)


Цитата

P.S. Тебе надо использовать дллину как либу, или переписать ее? Я что-то нпонял


Мне нужно написать "обертку" над этой библиотекой.

Мы делаем проект на платформе на платформе .NET и эта библиотека будет в нем использоваться.


PS: мне предлагали писать на C++ .NET - как думаешь, так лучше будет сделать ?
PM MAIL   Вверх
archeg
Дата 26.12.2008, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Цитата(sashara @ 26.12.2008,  10:55)
Цитата(archeg @ 26.12.2008,  10:46)


Цитата

P.S. Тебе надо использовать дллину как либу, или переписать ее? Я что-то нпонял


Мне нужно написать "обертку" над этой библиотекой.

Мы делаем проект на платформе на платформе .NET и эта библиотека будет в нем использоваться.


PS: мне предлагали писать на C++ .NET - как думаешь, так лучше будет сделать ?

хз, думаю что не важно. Он там как-то умеет объеденять менейдж и анменейдж код, но мы уже живем в каком веке? Как по мне - то либо пишешь на анменейдж что-то такое что не напишешь на менейдж, либо только на менейдж


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
Partizan
Дата 26.12.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



sashara, а зачем что-то переписывать????
если у вас есть скомпиленный Native модуль - так просто дёргайте его через DllImport...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
sashara
Дата 26.12.2008, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.12.2008

Репутация: нет
Всего: нет



Цитата(Partizan @ 26.12.2008,  11:22)
sashara, а зачем что-то переписывать????
если у вас есть скомпиленный Native модуль - так просто дёргайте его через DllImport...

хы, а чем дергать структуры, перечисления, константы, дефайны из *.h файла ? 

Там такие функции, что используются в основном свои типы данных.
PM MAIL   Вверх
mihryak
Дата 26.12.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



// тоже не знаю плюсов

1. структуры, перечисления и константы придётся переобъявить в шарповом варианте
2. в шапре это будет обычный enum
Код
enum ProjectionType
{
value1 = 0,
value2 = 4,
value3 = 99
}

в extern-декларации функций можно указывать параметром этот enum, он как целое число замаршалится
3. скорее всего byte[SomeConst]
4. там много всяких потенциально неприятных штук, но в большинстве случаев всё работает без использования хитрых атрибутов


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.