![]() |
Собственно, вопрос туп и типичен. Спрашивать стыдно, однако сам методом тыка я решать это буду еще долго.
Откомпилил в Длл код на КодеБлоксах: Код:
#define DLL_EXPORT __declspec(dllexport) Код:
Procedure TestFunction(x) Цитата:
Код:
Print TestFunction(5) Итак, собственно классический вопрос: Что делать?. ("Кто виноват"- не спрашиваю. Сам знаю кто):)) Кто знает, подскажите пожалуйста. Буду очень благодарен. Практически спасен от неминуемой жестокой смерти... |
Ваобще для блица экспорт ф-ций должен выглядеть примерно так:
#define BBDECL extern "C" _declspec(dllexport) #define BBCALL _stdcall BBDECL void BBCALL что-то() { ............ } Ещё возьми в качалке blitz.pp.ru утилитку для просмотра длл, очень удобная вещь, сразу покажет все ф-ции в длл и то как их надо в деклсе оформить ;) |
|
Утилиту скачал. Сейчас прогляну. Спасибо!
Цитата:
Однако ж, и на Пурике библиотеки для Блица делали... P.S. Статью я видел, трабла с ней- см. выше, но всё равно спасибо. :) |
Не пробовал создать внутри ДЛЛ-вской функции дополнительную переменную? Я не уверен, что можно так легко изменить значение самой x.
|
http://www.games-creators.org/wiki/Creer_u...ic_pour_Blitz3D
И вот этот пример не работает. Переделываю деклс под инструкцию- тоже не работает. Может это только у меня? 8( |
Цитата:
Код:
Procedure TestFunction(x) Код:
ProcedureCDLL.l TestFunction(x) |
Не-а: "User lib function not found".
А другие- работают. БлицОДЕ к примеру. Значит где-то я косячу. Хоть и не представляю, где там в оставшихся 5 строках теоретически возможно накосячить. Крышесрывательное состояние. |
посмотри чем нить какие функции находятся в твоей dll ...
|
Цитата:
Код:
.lib "You.dll" |
Да это-то понятно...не в том глюк...
Короче, переустановил Блиц, заново проставил 191 апдейт. Теперь откомпиленный ЕХЕ-шник правильно выводит значение х*2. Но дебаггер всё так же выводит ошибку. P.S. Если кинуть ДЛЛ в системную папку Виндов- всё работает, если ДЛЛ в Юзерлибсах или папке проекта- нет. Ладно, так уже терпимо- выкручусь. Огромное спасибо всем за помощь. :ok: P.P.S. Либа, откомпиленная на КодеБлоксах, также отлично работает, если соблюдать вышеприведенное простое правило. ;) |
Извините, но еще один вопрос. Надеюсь, поседний.
Хендлы в Блице - это целые числа. Указатели в Сях- это адреса памяти. У меня есть блицевский банк в памяти и его хендл. Можно ли, и каким образом, "перевести" этот инт-овый хендл в формат адреса памяти, понятный для функции на С? Спасибо за внимание и терпение. |
Хендл Блитц - и есть адрес объекта в памяти
|
Адрес. Но ведь в целочисленном формате.
Как его привести в понятный вид при передаче в функцию- вот что меня волнует? Ессно, такая фича не прокатит: код на Блице: Код:
Bank=CreateBank(1) Код:
#define DLL_EXPORT __declspec(dllexport) |
int * x=(int*)byte;
хм |
А вот с этого места поподробнее? :D
|
Я недавно писал приложение, демонстрирующее работу с банками и массивами через dll, но, похоже, удалил его. У Платона, может, осталось.
|
указатель на адрес памяти в блице менять не надо, просто пихаешь его на вход в ф-ю и всё ОК :)
BBDECL long BBCALL RetI(long *adresI) { ........ } |
Вложений: 2
Цитата:
|
Вложений: 2
Ага, спасибо! Ну теперь ясно, что у меня не работало...
Но возник еще один вопрос: на этот раз по Пурику. Написаная на нем функция "выдерживает" лишь несколько тысяч вызовов, а потом программа вылетает без каких-либо сообщений. Подозреваю утечку памяти, однако не могу локализовать. Более того, вылетает после нескольких вызовов ЛЮБАЯ откомпиленная на Пурике либа! Может просто на компьютере дрова кривые: ноутбук всё-таки... Вот простейший пример. Протестите, пожалуйста, на предмет глюков. У меня программа вылетает через секунду работы. Более того, последняя запись в логе количества проходов цикла оказывается незаконченой: Цитата:
Зар.спс! |
как я помню запись в файл идет в другом потоке :/
поетому неправильно проверять по записи файла утечки памяти... |
Р-р-р-р! Ты мне только ответь: у тебя тоже вылетает, или нет?
Если да, то я лишь хочу знать где напартачил (хотя чему в ЭТОМ-то примере течь?), чтоб исправить и не повторять больше таких ошибок. Работа стоит, куча математики по этим функциям, несколько нестандартных идей (кстати, надо будет не забыть выложить их на суд комьюнити...), солидный прирост скорости по сравнению с просчетом средствами Блица, а либа вылетает и всё коту под хвост... Ужос! :blink: |
вылетает там же где у тебя.
действительно странно. а текст самой функции покажи |
Текст в архиве: "Test.pb".
Собственно, код чисто символический, тестовый: Код:
ProcedureCDLL.w MyTest(x.w) P.S. Пурик-3.91й. Качал в Осле. Можно его где-нибудь для сравнения еще скачать с комплектом лекарств? |
Вылетает почти сразу, в логе пусто.
|
Угу, есть такое и в 4вертой версии. У меня мои либы тоже вылетают на N цикле в mav.
ЗЫ Надо надеется что апдейт исправит этот баг. |
А в какой не вылетает? А то ж ситуация с простоем работы- просто какой-то пушной зверек- песец.
|
PureBasic_3_94_(c9nh3j).exe
я откатился на эту версию у меня 4 ая даже компилить не хочет. |
Хз, у меня и на 3.93 версии вылетает.
2Tormoz Что компилить нехочет? У меня вроде все нормально работает. |
Скачал 3.80. Вылетает, как штык!
Есть хоть какая-то версия, которая работает? :) |
При выключенном дебаггере вылетает ошибка Stack overflow!
И хрен знает из-за чего... |
Короче:
Код:
ProcedureDLL.w MyTest(x.w) а для: Код:
ProcedureCDLL.w MyTest(x.w) пурик у меня 3.94 |
Угу, и то правда! :)
У меня на 3.80 и 3.94 - та же картина. Забавно. И немного странно. P.S. Кстати, самое главное забыл! Отслеживаются ли такие либы на Пурике алчными поборниками копирайтов, или ДЛЛ не имеют явных отличительных черт и могут быть выданы за написанные на каком-нить ДевС ? То есть, платил ли реально кто-нибудь эти 300 баксов? |
Цитата:
|
Цитата:
|
Часовой пояс GMT +4, время: 21:25. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot