Собственно, вопрос туп и типичен. Спрашивать стыдно, однако сам методом тыка я решать это буду еще долго.
Откомпилил в Длл код на КодеБлоксах: Код:
#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;
хм |
Часовой пояс GMT +4, время: 08:04. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot