1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Коллбэк в .net

Тема в разделе ".NET - программирование", создана пользователем evilden, 24 сен 2010.

  1. evilden

    evilden Гость

    Репутация:
    0
    Прошу помочь в следующем. Необходимо вызвать функцию приложения win forms из dll написанной на обычном си или ассемблере. Не получается по человечески передать параметры функции.
    вот пример
    Код:
    ///функция в приложении с++.net
    void ComWndFunc(int n)
    {
    
    GlobalObjects::form_->textBox1->Text+=n;
    //и что либо другое.
    }
    
    //функция в dll
    extern "C"_declspec(dllexport)void SetCallFunc(void (*fn)(int))
    {
    
    fn(2);
    }
    //Передача указателя на функцию приложения
    [DllImport("testc.dll")]
    extern "C" void SetCallFunc(void(*)(int));
    
    SetCallFunc(&ComWndFunc);
    В итоге функция вызывается но на экран например выводится 1. в отладке в n кладется тоже самое..Хотя функция вызывается и выводит
    на экран эту единичку.Что можно с этим сделать?
     
  2. userdab

    userdab Гость

    Репутация:
    0
    Посмотрите пример, мож поможет
     
  3. evilden

    evilden Гость

    Репутация:
    0
    Посмотрел давно нечто подобное.делаю так.
    Код:
    delegate void Func_1(char*n);
    Func_1^func1;
    
    func1= gcnew Func_1(this,&Form1::SetText);//где SetText-функция которую необходимо вызывать из dll.
    IntPtr hFunc1 = Marshal::GetFunctionPointerForDelegate(func1);
    SetCallFunc(hFunc1); //передаю в dll в качестве параметра указатель на функцию
    Но теперь портится указатель стека ESP из за чего программа и dll становятся полностью неадекватными..В чем может быть дело?
     
Загрузка...

Поделиться этой страницей