Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2010, 23:07   #1
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию DllImport + C/C++

Добрый день.
Возможно подобные темы звучали (я прошел по поиску, но мало нашел подходящего).

Вообщем сразу к сути, имеем следующее:
Код:
extern "C" __declspec(dllexport)  BlendData* __stdcall BlendCreate()
а так же моя попытка (можно сказать первый раз вижу C# ) импорта
Код:
[DllImport("blend.dll", CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr BlendCreate();
Симптомы:
1. Собирается проект успешно
2. Запуск происходит без проблем
3. Вызов данной функции происходит безболезненно
4. Результата ноль

Попытался из под VS (кода самой .dll) приатачиться к exe и из exe попытаться запустить .dll (функцию), но в саму функцию в .dll управление так и не передалось.

Почему IntPtr а не void* ? Ну попытался я void*, пишет нужно использовать только с unsafe, объявил, а тут пишет нужен фиксированные размер или что-то подобное. Может есть корректный способ объявить данную функцию ?
BOBAH13 вне форума Ответить с цитированием
Старый 05.01.2010, 15:51   #2
tinpl
 
Регистрация: 19.03.2009
Сообщений: 8
По умолчанию

ммм... можешь в С коде сделать System::IntPtr ptr и создать его из void*...
Точно не помню как я это делал но писал враппер на длл, просто сделал его мэнэджед кодом создавал IntPtr и возвращал его...

Тут походу проблема в несовместимости... когда ты возвращаешь blenddata* ты возвращаешь указатель... А объявил в c# как IntPtr... В с# он хранит эит указатели, но доступ к ним по функции Handle() или ToHandle() или ToPointer() .. Ну там на месте разберешься )
tinpl вне форума Ответить с цитированием
Старый 05.01.2010, 18:15   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Спасибо за отклик. Примерно 20 миг. после создания темы разобрался в принципе все ок и так было, просто stdcall еще поставил, ну и там функция у меня .dll немного не корректно написана (ее код) что ей приходилось возращать null, поэтому и думал что как будто ничего не происходит. А void* и IntPtr так и оставил, все с ними работает на ура.
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц