Экспорт класса, minigw gcc

Тема в разделе "WASM.UNIX", создана пользователем n0name, 20 окт 2006.

  1. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Необходимо написать враппер между библиотекой на С++ и прогой на асме в Win32. Библиотека компилится в minigw32 gcc. Получается dll'ка. Враппер должен экспортировать функции позволяющие работать с объектом класса. Собственно экспорт класса я сделал. Как теперь его импортировать в враппере(тоже C++), и корректно экспортировать функции для работы в винде.
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    n0name
    А что мешает юзать эту dll в асме напрямую?
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Quantum
    хм. то есть как напрямую? Библиотека экспортирует нужный мне класс. Я хочу работать с этим классом, то есть выполнять его методы. Для этого я и пишу враппер, с одноименными экспортируемыми функциями.
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    n0name
    Ясно.

    На асме? Но зачем враппер на C++?
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Примерчик можно.
    А то что-то таблица экспорта некрасивая какая-то.
    _ZN8GideData7CGideVM11GetFunctionEPKc - вот такого рода.
     
  6. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    [off]
    n0name
    :)
    Это еще не страшно, это ты на MS'ный мангл посмотри 8(
    [/off]
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Ustus
    делать мне больше нечего, чем на их манглы глядеть =)
    В IDA сразу жму demangaled :P
    в принципе написал с грехом паполам =)
    но мб можно напрямую.
     
  8. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    так напрямую
    и получается.
    замангленая GlideData::CGlideVM::GetFunction(const char*) то есть.
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    угу. только Gide :P
    ну и как мне это поможет что я знаю методы класса. Мне же надо ещё доступ к переменным класса.
    Ладно раз враппер написан, то вопросов больше не имею =)
     
  10. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    [off]
    да... надо завязывать с OGL, а то вон уже оговорочки... по Фрейду...
    [/off]

    а с переменными какие проблемы-то? Если поля имеются ввиду, то как в обычно в структуре - по смещению.
     
  11. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    n0name
    Посмотри в дизасме как сами методы получают доступ к свойствам. Должно быть что-то типа:
    Код (Text):
    1. mov reg32,_this
    2. mov [reg32+offset_1],xxx ; пишем в свойство 1
    Возможно, this передаётся в метод одним из параметров.
     
  12. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Так и есть, причем всегда первым. (кроме извратов типа __thiscall)
     
  13. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Ustus
    В __thiscall - это ecx.
     
  14. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Quantum
    Так и есть. Вообще, все это хорошо описал Фог в мануалах, часть 5 -
    Calling conventions for different C++ compilers and operating systems