| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Маршалинг структуры в C#. |
| Автор: bitwise 21.4.2008, 08:55 | ||||||
| Всем привет! Я пишу обертку на C# для С-библиотечки. Так вот, у меня есть структуры:
И есть пара функций:
Так вот, что делаю я:
Так вот я не понимаю, почему отрабатывает вызов первой функции и не отрабатывает вызов второй. Помогите пожалуйста, че-то я никак не соображу где ошибся. Спасибо. |
| Автор: mullih 21.4.2008, 10:29 |
| Может void free_device_list( device* dev ); [Dllimport("api.dll")] static extern int free_device_list( IntPtr device_ptr ); |
| Автор: bitwise 21.4.2008, 10:40 |
| Прошу прщения, я очепятался... int get_device_list( device* dev ); void free_device_list( device* dev ); и соответственно... [Dllimport("api.dll")] static extern int get_device_list( IntPtr device_ptr ); [Dllimport("api.dll")] static extern void free_device_list( IntPtr device_ptr ); |
| Автор: mullih 21.4.2008, 10:47 |
| а можно код функций int get_device_list( device* dev ); void free_device_list( device* dev ); |
| Автор: bitwise 21.4.2008, 11:04 |
| К сожалению кода нет... Это сторонняя DLL Может я структуру неправильно отмаршалил? |
| Автор: mullih 21.4.2008, 11:27 |
| С описанием не помогу так как точно не уверен но попробуй в шарпе struct params { char* info; params* next; }; описать и p_params сделать объетом этой структуры |
| Автор: bitwise 21.4.2008, 14:26 |
| Я обязательно попробую и отпишусь о результате... |
| Автор: mr.DUDA 24.4.2008, 10:17 | ||
Вместо IntPtr можно саму структуру по ref передать:
|
| Автор: bitwise 24.4.2008, 10:59 | ||||
| В общем бага оказалась надуманной, всем спасибо за брейнсторм. Оказывается ф-ция выглядит так: int get_device_list( device** dev ); вместо int get_device_list( device* dev ); Поэтому все и падало.... Я вот еще что не понимаю. Есть некая функция в some.dll, которая принимает указатель на структурку:
Так вот что делаю я :
При передаче параметра в функцию как IntPtr он переписывается. Насколько я понимаю так не должно быть и для того чтобы освободить память я сохраняю первоначальное значение в old_pdata, чтобы потом по нему освободить память. Но это коряво. Подскажите что я неправильно делаю??? |