purebasic.info

PureBasic forum
Текущее время: Пн дек 17, 2018 5:55 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
СообщениеДобавлено: Пт окт 05, 2018 5:54 pm 
Не в сети
доцент

Зарегистрирован: Пн фев 24, 2014 1:13 pm
Сообщений: 25
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Привет. написал на пурике dll, а ни где не могу загрузить. код вне процедур не использую. LoadLibrary из winapi, и OpenLibrary не дают загрузить dll. после LoadLibrary пробовал вызывать GetLastError, и преобразовывать код ошибки при помощи FormatMessage, выдаёт что операция успешно завершена, при этом нет хендла библиотеки(возвращает 0).
выкидываю исходники проекта. в папке bin, есть файл dll.pb который демонстрирует загрузку библиотеки, но там всё нули. в папке pb лежат исходники dll - Bridge.pb и сопутствующие файлы. короче, пишу бридж между sapi и pb. без пуриковской dll, файл sapi_int.dll нормально регается при помощи regsvr32. как только начинаю использовать как дополнение к sapi_int.dll пуриковскую bridge.dll, regsvr32 орёт, мол нет такой либы sapi_int.dll. после чего я и решил загрузить Bridge.dll просто как отдельную либу и проверить - результат
написан выше.

https://yadi.sk/d/qyujdZgtbw3xmw


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 05, 2018 8:15 pm 
Не в сети
профессор

Зарегистрирован: Пн янв 03, 2011 4:27 pm
Сообщений: 412
Благодарил (а): 5 раз.
Поблагодарили: 17 раз.
Пункты репутации: 0
Поставь в настройках, создание DLL.
И замени Procedure AttachProcess на ProcedureDLL AttachProcess


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 05, 2018 8:40 pm 
Не в сети
профессор

Зарегистрирован: Пн янв 03, 2011 4:27 pm
Сообщений: 412
Благодарил (а): 5 раз.
Поблагодарили: 17 раз.
Пункты репутации: 0
Ошибка в GetLastError 193?
P.S.0 error = GetLastError_()
P.S.1 Debug error


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 05, 2018 9:27 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
Нужно вызвать GetLastError сразу же после LoadLibrary.
Код:
1
2
3
handle = LoadLibrary_("bridge.dll")
error = GetLastError_()
Debug handle


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб окт 06, 2018 3:06 pm 
Не в сети
доцент

Зарегистрирован: Пн фев 24, 2014 1:13 pm
Сообщений: 25
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
я немного не правильно описал проблему. вот код, который не работает:
handle = LoadLibrary_("bridge.dll")
error = GetLastError_()
formatString.s{1024}
FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM,0,ERROR,0,@formatString,1023,0)
Debug error
Debug formatString

выдает ошибку 126: не найден указанный модуль.
dll компилировал и с командной строки и из пурика, одна фигня, не находит dll.
надо попробовать на другом пурике собрать, ибо бывают у них баги. как-то давно я выкидывал сюда код авторизации в контакте, который прекрасно работал на PureBasic 5.31, а на 5.60 WebGadget перестал отдавать строку после редиректа. кстать, эта проблема так и не исправлена.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб окт 06, 2018 3:45 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
electrik писал(а):
не найден указанный модуль.
Если указать абсолютный путь?
Что возвращает GetCurrentDirectory() Соответствует пути где находится dll?

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб окт 06, 2018 4:58 pm 
Не в сети
доцент

Зарегистрирован: Пн фев 24, 2014 1:13 pm
Сообщений: 25
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Один фиг, не работает.
есть у меня подозрение, может это из-за использования DataSection?
но там ведь нет кода, посути это статика, которая формируется на стадии компиляции.
уже попробовал на FreeBasic написать следующий код:
Код:
1
2
3
4
5
 
#include "windows.bi"
print LoadLibrary("bridge.dll")
sleep
 


тоже самое, нулевой хендл.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб окт 06, 2018 5:19 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
Для загрузки bridge.dll нужен файл dict.dll.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб окт 06, 2018 6:27 pm 
Не в сети
доцент

Зарегистрирован: Пн фев 24, 2014 1:13 pm
Сообщений: 25
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Да, это я уже тоже выяснил, что проблема с newfon. как я убрал все его вызовы, то сразу всё стало ок. как раз недавно, я правил и менял dict.dll на другое название, где-то что-то не до правил.

одна голова хорошо а много лучше, спасибо, всё теперь работает. и ведь был секции импорта newfon.dll, как не обратил внимание, что не правлено dic.dll на nf_dict.dll! ыыы! блин, а так реально уже из-за своей тупости хотел код на другой язык переписывать!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб окт 06, 2018 6:53 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
Винда ведь сообщает из-за чего не удалось загрузить DLL. Как это можно было не заметить?
Изображение

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт окт 09, 2018 4:26 am 
Не в сети
доцент

Зарегистрирован: Пн фев 24, 2014 1:13 pm
Сообщений: 25
Благодарил (а): 2 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
У меня он говорил причину, что не найден указанный модуль, но не говорил про dict.dll. всякое бывает, программирование - это постоянная учоба, и имея опыт, можно споткнуться.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт окт 09, 2018 12:14 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
В таких случаях нужно через LoadLibrary загружать все библиотеки что статически прилинкованы в программе и найти ту из-за которой проблема.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot] и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB