Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 12:55 27.04.24 
Клубове/ Компютри и Интернет / .NET Всички теми Следваща тема Пълен преглед*
Информация за клуба
Тема проблем с pinvoke
Автор Skotowydec (disable:4786)
Публикувано03.12.03 10:54  



Опитвам се от .NET да извикам DLL със следната функция:

struct Foo {
// only ints, shorts and bytes here
};

int FooBar(Foo **ppFoos, int *pCount);

Тя алокира памет, слага там определен брой структури Foo, връща указател към тази памет в *ppFoos, и връща броя им в *pCount.

Доколкото разбрах от RTFMSDN, няма начин това да се направи официално -
в тази посока се поддържа маршалинг или на променлив по размер масив от примитивни типове, или на фиксиран по размер масив от произволни структури, но не променлив масив от произволни структури.

В изблик на отчаяние се опитах да го прочета в масив byte[] с IntPtr и Marshal.Copy, както в един от техните примери, но пак нещо не е наред - получавам null reference exception на извикването на Marshal.Copy, когато се опитам да прочета пълния размер данни от IntPtr-то (count * sizeof);
когато чета примерно половината данни, не гърми. (И преди да сте попитали, да, sizeof-ите на структурите от двете страни на маршалинга са еднакви.)

Някаква идея? Как е морално правилно да извикам тази функция, или ще се наложи да си пиша wrapper DLL на С++, който да направи маршалинга до по-.НЕТ-дружелюбни типове?



Цялата тема
ТемаАвторПубликувано
* проблем с pinvoke Skotowydec   03.12.03 10:54
. * Re: проблем с pinvoke synchu   03.12.03 12:13
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.