Используя .dll методы для загрузки данных из файла в коде C#

Я хочу использовать в C# эти методы:

*      int LibRaw::open_datastream(LibRaw_abstract_datastream *stream)
*      int LibRaw::open_file(const char *rawfile)
*      int LibRaw::open_buffer(void *buffer, size_t bufsize)
*      int LibRaw::unpack(void)
*      int LibRaw::unpack_thumb(void)

это хранится в libraw.dll. Эти функции один за другим загружают данные из файла... Я читал о P/Invoke, но я не уверен, как вызвать их. Может любой показывать мне пример, как использовать все эти функции вместе в C# для загрузки файла (необработанное изображение, сохраненное в папке) или как к PIvoke один из них.

Спасибо!

p.s., возможно, это может быть полезно: http://www.libraw.org/

1
задан Espinas.iss 1 June 2010 в 14:46
поделиться

2 ответа

Там, где я работаю, мы обнаружили, что лучший способ сделать это - написать код оболочки на C ++ / CLI. Я думал, что у меня есть хорошая статья об этом процессе, но, видимо, нет. У меня есть две короткие статьи: одна о том, как работать с неуправляемыми статическими библиотеками , а другая о , как обернуть библиотеки (в управляемом C ++ в отличие от C ++ / CLI). Решение аналогично - просто вам нужно подключиться к библиотеке-заглушке, которая загружает dll, или загрузить ее самостоятельно и вызвать GetProcAddress, чтобы получить процедуру, которую вы обертываете.

Преимущество состоит в том, что вы можете вызывать неуправляемый код непосредственно из C ++ / CLI и контролировать, когда и как происходит маршаллинг. Недостатком является то, что вы пишете на C ++ и вам нужно контролировать, как происходит маршаллинг.

1
ответ дан 3 September 2019 в 00:15
поделиться

вы должны создать RCW для C# DLL, чтобы сделать их пригодными для использования в VC++ см. следующую ссылку, которая может быть полезна, так как она дает пошаговое руководство для достижения того же :-

http://www.codeproject.com/KB/atl/ComWarpperForDotNet.aspx

1
ответ дан 3 September 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: