Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 10.05.2006, 22:51   #1
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Печаль

Собственно, вопрос туп и типичен. Спрашивать стыдно, однако сам методом тыка я решать это буду еще долго.

Откомпилил в Длл код на КодеБлоксах:
#define DLL_EXPORT __declspec(dllexport)
DLL_EXPORT int TestFunction( int NRec )
{
   return NRec*2;
}
И/или нечто подобное- на ПуреВасике:
Procedure TestFunction(x)
   x=x*2
   ProcedureReturn x
EndProcedure
End
Создал в юзерлибсах Блица файл "TestFunction.decls" с содержанием
.lib "TestFunction.dll"
TestFunction(x):"_TestFunction@4"
Наконец, черкнул в Блице код:
Print TestFunction(5)
WaitKey()
End
На обе Длл-ы Блиц пишет "User lib function not found".
Итак, собственно классический вопрос: Что делать?. ("Кто виноват"- не спрашиваю. Сам знаю кто))

Кто знает, подскажите пожалуйста. Буду очень благодарен. Практически спасен от неминуемой жестокой смерти...
(Offline)
 
Ответить с цитированием
Старый 10.05.2006, 23:16   #2
НУБ
Бывалый
 
Регистрация: 22.09.2005
Сообщений: 634
Написано 36 полезных сообщений
(для 102 пользователей)
Ваобще для блица экспорт ф-ций должен выглядеть примерно так:

#define BBDECL extern "C" _declspec(dllexport)
#define BBCALL _stdcall

BBDECL void BBCALL что-то()
{
............
}

Ещё возьми в качалке blitz.pp.ru утилитку для просмотра длл, очень удобная вещь, сразу покажет все ф-ции в длл и то как их надо в деклсе оформить
(Offline)
 
Ответить с цитированием
Старый 10.05.2006, 23:21   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Вот еще статья про написание DLL для блица

http://hiromych.narod.ru/Blitz/articles/CppDll/DLL.htm
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 10.05.2006, 23:28   #4
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Утилиту скачал. Сейчас прогляну. Спасибо!
#define BBDECL extern "C" _declspec(dllexport)
#define BBCALL _stdcall
КодеБлокс-ы такие дефайны корректно не воспорнимают. Это, как я понимаю, код для МсВижуалС.
Однако ж, и на Пурике библиотеки для Блица делали...

P.S. Статью я видел, трабла с ней- см. выше, но всё равно спасибо.
(Offline)
 
Ответить с цитированием
Старый 11.05.2006, 00:56   #5
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Не пробовал создать внутри ДЛЛ-вской функции дополнительную переменную? Я не уверен, что можно так легко изменить значение самой x.
(Offline)
 
Ответить с цитированием
Старый 11.05.2006, 12:36   #6
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
http://www.games-creators.org/wiki/Creer_u...ic_pour_Blitz3D
И вот этот пример не работает.
Переделываю деклс под инструкцию- тоже не работает.
Может это только у меня?
8(
(Offline)
 
Ответить с цитированием
Старый 11.05.2006, 15:54   #7
Maxus
ПроЭктировщик
 
Регистрация: 17.02.2006
Сообщений: 144
Написано 13 полезных сообщений
(для 36 пользователей)
Originally posted by Diplomat@10.5.2006, 21:51
И/или нечто подобное- на ПуреВасике:
Procedure TestFunction(x)
 * * x=x*2
 * * ProcedureReturn x
EndProcedure
End
Вот твой код:
Procedure TestFunction(x)
   x=x*2
   ProcedureReturn x
EndProcedure
End
Вот Мой:
ProcedureCDLL.l TestFunction(x)
   x=x*2
   ProcedureReturn x
EndProcedure
End
Этот работает, сам проверял.
(Offline)
 
Ответить с цитированием
Старый 11.05.2006, 20:15   #8
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Не-а: "User lib function not found".

А другие- работают. БлицОДЕ к примеру.

Значит где-то я косячу. Хоть и не представляю, где там в оставшихся 5 строках теоретически возможно накосячить. Крышесрывательное состояние.
(Offline)
 
Ответить с цитированием
Старый 12.05.2006, 00:21   #9
jimon
 
Сообщений: n/a
посмотри чем нить какие функции находятся в твоей dll ...
 
Ответить с цитированием
Старый 12.05.2006, 14:02   #10
Maxus
ПроЭктировщик
 
Регистрация: 17.02.2006
Сообщений: 144
Написано 13 полезных сообщений
(для 36 пользователей)
Originally posted by Diplomat@11.5.2006, 19:15
Не-а: "User lib function not found".

А другие- работают. БлицОДЕ к примеру.

Значит где-то я косячу. Хоть и не представляю, где там в оставшихся 5 строках теоретически возможно накосячить. Крышесрывательное состояние.
.lib "You.dll"
TestFunction%(x%)
(Offline)
 
Ответить с цитированием
Старый 12.05.2006, 15:10   #11
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Да это-то понятно...не в том глюк...

Короче, переустановил Блиц, заново проставил 191 апдейт. Теперь откомпиленный ЕХЕ-шник правильно выводит значение х*2. Но дебаггер всё так же выводит ошибку.

P.S. Если кинуть ДЛЛ в системную папку Виндов- всё работает, если ДЛЛ в Юзерлибсах или папке проекта- нет.
Ладно, так уже терпимо- выкручусь.
Огромное спасибо всем за помощь.

P.P.S. Либа, откомпиленная на КодеБлоксах, также отлично работает, если соблюдать вышеприведенное простое правило.
(Offline)
 
Ответить с цитированием
Старый 14.05.2006, 17:06   #12
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Извините, но еще один вопрос. Надеюсь, поседний.

Хендлы в Блице - это целые числа. Указатели в Сях- это адреса памяти.
У меня есть блицевский банк в памяти и его хендл. Можно ли, и каким образом, "перевести" этот инт-овый хендл в формат адреса памяти, понятный для функции на С?

Спасибо за внимание и терпение.
(Offline)
 
Ответить с цитированием
Старый 14.05.2006, 18:35   #13
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Хендл Блитц - и есть адрес объекта в памяти
__________________
(Offline)
 
Ответить с цитированием
Старый 14.05.2006, 20:08   #14
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Адрес. Но ведь в целочисленном формате.
Как его привести в понятный вид при передаче в функцию- вот что меня волнует?
Ессно, такая фича не прокатит:
код на Блице:
Bank=CreateBank(1)
PokeByte Bank,0,100
x=SomeFunction(Bank)
код функции на С:
#define DLL_EXPORT __declspec(dllexport)
int DLL_EXPORT SomeFunction(void *byte)
{
 * *int x=*(int*)byte;
 * *return x;
}
(Offline)
 
Ответить с цитированием
Старый 14.05.2006, 23:35   #15
jimon
 
Сообщений: n/a
int * x=(int*)byte;
хм
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 09:44.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com