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

Я хочу использовать в 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 один из них.

Thanx!

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

Ответы [ 2 ]

1 голос
/ 31 мая 2010

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

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

1 голос
/ 28 мая 2010

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

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

...