Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> __clrcall в __stdcall 
:(
    Опции темы
Therion
Дата 3.6.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



Пишу как всегда либу обертку для C-х функций на C++/CLI. Есть старая функция которой передается адресс callback функции. Как мне передать туда адресс managed функции?
При тупой передаче получаю предупреждение warning C4441: calling convention of '__stdcall ' ignored; '__clrcall ' used instead ну а там где осуществляется передача ошибку error C3374: can't take address of 'MyClass::MyCallbackFunction' unless creating delegate instance. Какие есть решения проблемы?
Заранее благодарен.
PM MAIL   Вверх
_hunter
Дата 3.6.2008, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 2
Всего: 98



ну так русским же языком пишут -- делегат давай.
ты бы доки какие-нить почитал бы...
http://www.codeproject.com/KB/mcpp/usingcppdll.aspx


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Therion
Дата 3.6.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



Спасибо всем. http://msdn.microsoft.com/en-us/library/367eeye0(VS.80).aspx решила все мои проблемы.
PM MAIL   Вверх
Therion
Дата 3.6.2008, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



Это конечно решило проблемы, но как мне передать через callback параметр void* inUserData указатель на managed класс?
PM MAIL   Вверх
Therion
Дата 3.6.2008, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 21.12.2003

Репутация: нет
Всего: нет



Еще одна проблема. Адресс Callback функции передается функции MyOldCFunction которая его запоминает и время от времени дергает, но програма крешится из за того что адресс ProcessResponses функции меняется. Можно как-то запинить адресс делегата?
Код

ref class MyClass
{
  MyClass();
  ~MyClass();

  delegate void Response_ProcessResponses(void*);
  Response_ProcessResponses^ mProcessResponsesHandler;
  GCHandle mGCH;
  static void ProcessResponses(void* inUserData)
  {
      // do something
  }
};

MyClass::MyClass()
{
   mProcessResponsesHandler = gcnew Response_ProcessResponses(MyClass::ProcessResponses);
   mGCH = GCHandle::Alloc(mProcessResponsesHandler);
   IntPtr ip = Marshal::GetFunctionPointerForDelegate(mProcessResponsesHandler);
   ResponseCallback cb = static_cast<ResponseCallback>(ip.ToPointer());
  ::MyOldCFunction(cb, NULL);
}

MyClass::~MyClass()
{
  mGCH.Free();
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0897 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.