 |
3D-программирование Вопросы, касающиеся программирования 3D мира |
10.05.2006, 22:51
|
#1
|
Дэвелопер
Регистрация: 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
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
|
(Offline)
|
|
10.05.2006, 23:28
|
#4
|
Дэвелопер
Регистрация: 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
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Не пробовал создать внутри ДЛЛ-вской функции дополнительную переменную? Я не уверен, что можно так легко изменить значение самой x.
|
(Offline)
|
|
11.05.2006, 12:36
|
#6
|
Дэвелопер
Регистрация: 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
|
ПроЭктировщик
Регистрация: 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
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Не-а: "User lib function not found".
А другие- работают. БлицОДЕ к примеру.
Значит где-то я косячу. Хоть и не представляю, где там в оставшихся 5 строках теоретически возможно накосячить. Крышесрывательное состояние.
|
(Offline)
|
|
12.05.2006, 00:21
|
#9
|
|
посмотри чем нить какие функции находятся в твоей dll ...
|
|
|
12.05.2006, 14:02
|
#10
|
ПроЭктировщик
Регистрация: 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
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Да это-то понятно...не в том глюк...
Короче, переустановил Блиц, заново проставил 191 апдейт. Теперь откомпиленный ЕХЕ-шник правильно выводит значение х*2. Но дебаггер всё так же выводит ошибку.
P.S. Если кинуть ДЛЛ в системную папку Виндов- всё работает, если ДЛЛ в Юзерлибсах или папке проекта- нет.
Ладно, так уже терпимо- выкручусь.
Огромное спасибо всем за помощь.
P.P.S. Либа, откомпиленная на КодеБлоксах, также отлично работает, если соблюдать вышеприведенное простое правило. 
|
(Offline)
|
|
14.05.2006, 17:06
|
#12
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Извините, но еще один вопрос. Надеюсь, поседний.
Хендлы в Блице - это целые числа. Указатели в Сях- это адреса памяти.
У меня есть блицевский банк в памяти и его хендл. Можно ли, и каким образом, "перевести" этот инт-овый хендл в формат адреса памяти, понятный для функции на С?
Спасибо за внимание и терпение.
|
(Offline)
|
|
14.05.2006, 18:35
|
#13
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Хендл Блитц - и есть адрес объекта в памяти
__________________
|
(Offline)
|
|
14.05.2006, 20:08
|
#14
|
Дэвелопер
Регистрация: 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
|
|
int * x=(int*)byte;
хм
|
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:43.
|