Важная информация
Страница 1 из 10 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 98

Тема: Подключить библиотеку dll

  1. #1 Подключить библиотеку dll 
    Модератор
    Регистрация
    19.02.2014
    Сообщений
    403
    Сказал(а) спасибо
    108
    Поблагодарили 303 раз(а) в 191 сообщениях
    Записей в блоге
    36
    Т.к. Quiet Snow был забанен на cyberforum отвечу тут на [Ссылки могут видеть только зарегистрированные пользователи. ] чтобы была обратная связь:

    Посмотрел. 3 ошибки

    1. Как я говорил ты передаешь указатель на префикс (6), а нужно на строку. Либо сделать типа того:

    Assembler Code:
    1. POKE INTEGER, Sa, 6
    2. Sa = Sa + 4


    Либо просто использовать SysAllocString которая сама делает BSTR из обычной строки.

    2. Лишнее перенаправление. Вместо указателя на интерфейс ты передаешь указатель уже на метод, а вместо вызова метода по указателю вызываешь по значению первых инструкций самого метода.

    3. Вместо указателя на BSTR, передается BSTR.

    2 и 3 решается изменением ассемблерного кода:

    Assembler Code:
    1.    ASM
    2.       LEA ECX, Sa       '  Параметр функции(смещение BSTR)
    3.       PUSH ECX          '  В стек
    4.  
    5.       MOV EAX, IFace    '   В EAX по идее находится [указатель на интерфейс]
    6.       PUSH EAX          '   Забьем его в стек
    7.       MOV ECX, EAX      '   В ECX - указатель на интерфейс
    8.       MOV EAX, [ECX]    '   Указатель на первый элемент таблицы методов
    9.  
    10.       CALL [EAX + F_ShowMsgBox]   '  Вызываем
    11.  
    12.     END ASM
    UA6527P
    Ответить с цитированием  
     

  2. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (04.04.2018), Free Admin (05.04.2018)

  3. #2  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,935
    Сказал(а) спасибо
    1,845
    Поблагодарили 986 раз(а) в 844 сообщениях
    Записей в блоге
    1
    Спасибо дядька! Всё получилось!

    Я действительно из-за незнания форматов, карты памяти и объектной модели - наворотил чушь.

    Вот код полностью:

    FreeBasic Code:
    1.    #DEFINE WIN_INCLUDEALL
    2.    #INCLUDE ONCE "Windows.bi"
    3.  
    4. ENUM FuncOffset      '  Считается за константу(подставляется компил-ром в виде константы)
    5.   F_QueryInterface   = 0
    6.   F_AddRef           = 4
    7.   F_Release          = 8
    8.   F_GetTypeInfoCount = 12
    9.   F_GetTypeInfo      = 16
    10.   F_GetIDsOfNames    = 20
    11.   F_Invoke           = 24
    12.   F_ShowMsgBox       = 28
    13. END ENUM
    14.  
    15. DIM SHARED  CLSDID_CTest AS CLSID = (&H322E4E2F, &HE105, &H4BB0, {&H9B, &H21, &H4C, &H2A, &H6A, &HF6, &HDE, &H2D})
    16. DIM SHARED  IID__CTest AS IID = (&HD83F0A2C, &H3940, &H4237, {&HB8, &H8E, &H70, &H97, &H47, &H9D, &H01, &HC6})
    17.  
    18. DIM SHARED  Stroka AS WSTRING * 10
    19. DIM SHARED  Sa AS INTEGER
    20. Stroka = "  Hello!" + CHR(0)    '  4 байта в начале оставляем для длины
    21. Sa = CINT(SADD(Stroka))         '  Смещение строки
    22. POKE INTEGER, Sa, 6             '  Пишем длину
    23. Sa = Sa + 4
    24.  
    25. DIM SHARED  IFace AS INTEGER
    26. DIM SHARED  hr AS HRESULT
    27.  
    28.     hr = CoInitialize (0)
    29.     hr = CoCreateInstance (@CLSDID_CTest, 0, CLSCTX_INPROC_SERVER, @IID__CTest, @IFace)
    30.  
    31.  
    32.    ASM
    33.       LEA ECX, Sa       '  Параметр функции(смещение BSTR)
    34.       PUSH ECX          '  В стек
    35.  
    36.       MOV EAX, IFace    '   В EAX по идее находится [указатель на интерфейс]
    37.       PUSH EAX          '   Забьем его в стек
    38.       MOV ECX, EAX      '   В ECX - указатель на интерфейс
    39.       MOV EAX, [ECX]    '   Указатель на первый элемент таблицы методов
    40.  
    41.       CALL [EAX + F_ShowMsgBox]   '  Вызываем
    42.  
    43.    END ASM
    44. SLEEP
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  4. #3  
    Модератор
    Регистрация
    19.02.2014
    Сообщений
    403
    Сказал(а) спасибо
    108
    Поблагодарили 303 раз(а) в 191 сообщениях
    Записей в блоге
    36
    Не сложнее LoadLibrary, GetProcAddress? А представь к примеру интерфейс с 50 методами, мы одним вызовом сразу 50 функций получаем. Или как удобно реализовать плагины с общим интерфейсом, в одной dll можно кучу плагинов сделать и очень просто и удобно ими управлять.
    UA6527P
    Ответить с цитированием  
     

  5. Пользователь сказал cпасибо:

    Free Admin (05.04.2018)

  6. #4  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,935
    Сказал(а) спасибо
    1,845
    Поблагодарили 986 раз(а) в 844 сообщениях
    Записей в блоге
    1
    Цитата Сообщение от The trick Посмотреть сообщение
    Не сложнее LoadLibrary, GetProcAddress?
    Анатолий, я этого пока не понимаю, ни лёгкости ни профитов. Для меня это всё очень сложно, хоть может
    и смешным показаться. Уже говорил, что не ООП-шник и не вижу в этом профитов для себя.

    Касательно кода, задублируй его в ту тему и бедвиту напиши, чтобы он реализовал x32 версию и
    описал формат прототипов функций. Если сделает, посмотрим что там к чему.
    А сам пока подумаю как этот код в нормальный вид привести.


    UPD:
    Цитата Сообщение от The trick Посмотреть сообщение
    Без манифеста работает? У Quiet Snow все заработало.
    У меня без манифеста заработало только когда библиотека зарегистрирована. Когда не зарегистрирована,
    - то валится с ошибкой. Надо вшивать в файл ресурсов, как в твоём примере на fasm.

    Цитата Сообщение от The trick Посмотреть сообщение
    в одной dll можно кучу плагинов сделать и очень просто и удобно ими управлять
    Можно, согласен, но вряд ли когда-нибудь буду этим заморачиваться. Возможность засунуть что-то
    в один контейнер - это конечно крутая абилка, просто большинство людей привыкли к "одна dll - один плагин".
    Последний раз редактировалось >Quiet Snow<; 05.04.2018 в 03:13. Причина: Объединение сообщений
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  7. #5  
    Начинающий Аватар для Эрик Замабувараев-Ёмолкуу
    Регистрация
    12.03.2018
    Сообщений
    31
    Сказал(а) спасибо
    0
    Поблагодарили 18 раз(а) в 13 сообщениях
    Так‐так‐так, что это тут у нас? Интерфейсы? Я как раз статью шлифую по интерфейсам.
    В следующей статье расскажу про COM интерфейсы.
    Ответить с цитированием  
     

  8. #6  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,935
    Сказал(а) спасибо
    1,845
    Поблагодарили 986 раз(а) в 844 сообщениях
    Записей в блоге
    1
    Цитата Сообщение от Эрик Замабувараев-Ёмолкуу Посмотреть сообщение
    Замабувараев
    Меня это интересует исключительно в контексте проблемы bedvit-a(смотри CF раздел QBASIC),
    у него нету тестеров. Приходится изъёживаться как "лоссось" на сковородке.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  9. #7  
    Начинающий
    Регистрация
    05.04.2018
    Сообщений
    26
    Сказал(а) спасибо
    4
    Поблагодарили 8 раз(а) в 6 сообщениях
    Продуктивный разговор был и тут оппа бан! Библу х32 собираю, там нужно с longlong на long перейти, сделать правильное описание к интерфейсу, ресурсы другие загрузить, короче косметику навести. Планирую (подбросили в топку дрофишек - задач) сегодня выложить (+xll).
    Ответить с цитированием  
     

  10. #8  
    Модератор
    Регистрация
    19.02.2014
    Сообщений
    403
    Сказал(а) спасибо
    108
    Поблагодарили 303 раз(а) в 191 сообщениях
    Записей в блоге
    36
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    У меня без манифеста заработало только когда библиотека зарегистрирована.
    Да. Манифест нужен чтобы работало без регистрации.

    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    Надо вшивать в файл ресурсов, как в твоём примере на fasm.
    Необязательно, можно просто в папке с exe держать манифест.
    UA6527P
    Ответить с цитированием  
     

  11. #9  
    Начинающий
    Регистрация
    05.04.2018
    Сообщений
    26
    Сказал(а) спасибо
    4
    Поблагодарили 8 раз(а) в 6 сообщениях
    Собрал разной разрядности библиотеки. [Ссылки могут видеть только зарегистрированные пользователи. ]

    Библы там же. В моем блоге.
    Ответить с цитированием  
     

  12. #10  
    Admin
    Регистрация
    09.04.2014
    Сообщений
    1,220
    Сказал(а) спасибо
    781
    Поблагодарили 493 раз(а) в 405 сообщениях
    Цитата Сообщение от bedvit Посмотреть сообщение
    Собрал
    Просто ты у нас новичок поэтому спамстоп тебя не пропускает пока....)))
    он у нас умный чертяка...))
    ты не торопись если твоё сообщение или тема сразу не появились то ушли на модерацию, проверим и пропустим...)
    Ответить с цитированием  
     

  13. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (05.04.2018), bedvit (25.04.2018)

Страница 1 из 10 123 ... ПоследняяПоследняя
Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Как подключить микроразметку на сайт?
    от fearussia86 в разделе Общие вопросы web-разработки
    Ответов: 2
    Последнее сообщение: 15.05.2017, 12:10
  2. Ответов: 0
    Последнее сообщение: 18.05.2015, 14:00
  3. Ответов: 1
    Последнее сообщение: 14.03.2014, 13:09
  4. Помогите подключить длл к ехе
    от asfar1123 в разделе Assembler
    Ответов: 2
    Последнее сообщение: 16.01.2013, 16:40
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •