forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   Как приделать к BlitzMax DLL (http://forum.boolean.name/showthread.php?t=8431)

Randomize 04.06.2009 22:32

Как приделать к BlitzMax DLL
 
Хочу приделать Dll к BlitzMax судя по статье Blitz Et Cetera, где я черпал инфу по данному вопросу выяснилось что это делается вот так:

Код:

SuperStrict

Module тратата.тратата
Import brl.blitz
       
Const DLL:String= "НацНац.dll"

Extern "win32"
        Function FindWindowA%(class%,title$z)
        Function LoadLibraryA(lib$z)
        Function GetProcAddress:Byte Ptr(lib%,fname$z)
End Extern


        Global Привет(x%,y%) "win"
        Global Пока  (x%,y%) "win"



Global lib%=LoadLibraryA()
If lib% Then
        Привет(x%,y%) =GetProcAddress(lib,"Preved")
        Пока  (x%,y%) =GetProcAddress(lib,"GoodPoka")
Else
        RuntimeError("Не не не, Девид Блейн!  " + DLL)
        End
End If

Но не канает. :э(
Очевидно в ковычках в GetProcAddress(lib,"Preved") помимо названия фции должны быть
ещё и её параметры, но как их там указывать я пока не понял.
Ктонибуть может помочь?
А поможет?

SBJoker 04.06.2009 22:46

Ответ: Как приделать к BlitzMax DLL
 
Скорее так:
Код:

SuperStrict

Module тратата.тратата
Import brl.blitz
   
Const DLL:String= "НацНац.dll"

Extern "win32"
    Function FindWindowA%(class%,title$z)
    Function LoadLibraryA(lib$z)
    Function GetProcAddress:Byte Ptr(lib%,fname$z)
End Extern


    Global Привет(x%,y%) "win32"
    Global Пока  (x%,y%) "win32"



Global lib%=LoadLibraryA()
If lib% Then
    Привет =GetProcAddress(lib,"Preved@8")
    Пока    =GetProcAddress(lib,"GoodPoka@8")
Else
    RuntimeError("Не не не, Девид Блейн!  " + DLL)
    End
End If


Randomize 04.06.2009 23:00

Ответ: Как приделать к BlitzMax DLL
 
@8 - эт чё??

impersonalis 04.06.2009 23:10

Ответ: Как приделать к BlitzMax DLL
 
8 байт входных аругментов в функции (4+4 [2 int т.е.])

Черный крыс 05.06.2009 01:44

Ответ: Как приделать к BlitzMax DLL
 
Если у DLLки имееться статическая библиотека, то задача упроститься.

dimanche13 05.06.2009 11:11

Ответ: Как приделать к BlitzMax DLL
 
Цитата:

Сообщение от impersonalis (Сообщение 106713)
8 байт входных аругментов в функции (4+4 [2 int т.е.])

по-моему там не важно int это или byte, просто (4 * кол-во параметров)

скоро моё юбилейное сообщение, ждите :)

SBJoker 05.06.2009 11:36

Ответ: Как приделать к BlitzMax DLL
 
Ну да, в основном в win32 все входные параметры dll это 4х байтовые целые или дробные.

Randomize 05.06.2009 20:10

Ответ: Как приделать к BlitzMax DLL
 
Цитата:

Сообщение от Diablo1909 (Сообщение 106734)
Если у DLLки имееться статическая библиотека, то задача упроститься.

Статитческая библиотека?

Эксперементы ставлю на AStar.dll

Черный крыс 05.06.2009 22:40

Ответ: Как приделать к BlitzMax DLL
 
Цитата:

Сообщение от Randomize (Сообщение 106793)
Статитческая библиотека?

Эксперементы ставлю на AStar.dll

ага...они компиляться вместе с DLL. В этих файлах храняться интерфейсы к DLL. Что то типа "готового хидера". Многие разрабы кладут их вместе с СДК.

Поищи в папочках, может найдешь....либо мелкосовтовский AStar.lib либо gcc-шный AStar.a

В Блиц-максе просто импортируй его : Import AStar.lib, после этого тебе останеться только обьявить эти функции в БМаксе (Extern::EndExtern)

Насчет AStar.dll - это случайно не мой Астар для Блиц3Д ? Могу дать lib-файл.

Randomize 07.06.2009 05:53

Ответ: Как приделать к BlitzMax DLL
 
Именно! Та самая AStar.dll )
От lib не откажусь, заранее спасибо!

Randomize 08.06.2009 18:40

Ответ: Как приделать к BlitzMax DLL
 
Итог эксперементов:
Код:

Strict
Module Subject.AStar
Import Pub.Win32

Private
Local lib%

Public

lib = LoadLibraryA("AStar.dll")

Global AStar_INIT(xMap%,yMap%) = GetProcAddress(lib, "AStar_INIT")
Global EstimateHcost%(a%,b%,targetx%,targety%) = GetProcAddress(lib, "EstimateHcost")
Global FindPath%(pathfinderID%,mapWidth%,mapHeight%,startX%,startY%,targetX%,targetY%,stepBystep%) = GetProcAddress(lib, "FindPath")
Global ReadPathX%(pathfinderID%,pathLocation%) = GetProcAddress(lib, "ReadPathX")
Global ReadPathY%(pathfinderID%,pathLocation%) = GetProcAddress(lib, "ReadPathY")
Global ReadPath%(pathfinderID%) = GetProcAddress(lib, "ReadPath")
Global Get_walkability%(x%,y%) = GetProcAddress(lib, "Get_walkability")
Global Set_walkability(x%,y%,param%) = GetProcAddress(lib, "Set_walkability")
Global Get_listArray%(x%,y%) = GetProcAddress(lib, "Get_listArray")
Global Set_listArray(x%,y%,param%) = GetProcAddress(lib, "Set_listArray")
Global Get_parentX%(x%,y%) = GetProcAddress(lib, "Get_parentX")
Global Get_parentY%(x%,y%) = GetProcAddress(lib, "Get_parentY")
Global Get_Fcost%(x%,y%) = GetProcAddress(lib, "Get_Fcost")
Global Get_Gcost%(x%,y%) = GetProcAddress(lib, "Get_Gcost")
Global Get_Hcost%(x%,y%) = GetProcAddress(lib, "Get_Hcost")
Global CheckForIsland(x%,y%) = GetProcAddress(lib, "CheckForIsland")

lib = 0

Но вот Shimatta!!!!
Никак не хочет блиц его вкушивать.
Путь: BlitzMax\mod\subject.mod\AStar.mod\AStar.bmx
Тамже и DLL обитает...
MinGW есть.
Скомпилил.
Код:

Building test
Compiling:test.bmx
Compile Error: Can't find interface for module 'subject.astar'
[C:/Documents and Settings/Администратор/Рабочий стол/astar/test.bmx;1;1]
Build Error: failed to compile C:/Documents and Settings/Администратор/Рабочий стол/astar/test.bmx
Process complete

Wtf???

dimanche13 09.06.2009 11:21

Ответ: Как приделать к BlitzMax DLL
 
БМ не может найти модуль. Ты его скомпилил вообще?
и где лежат сорцы, напиши полный путь к папке.

П.С. штука парни, это - 1000 :)

Randomize 09.06.2009 19:56

Ответ: Как приделать к BlitzMax DLL
 
Ну я помоему всё что можно расписал...

dimanche13 10.06.2009 12:01

Ответ: Как приделать к BlitzMax DLL
 
а скомпилил ты под дебаг и под релиз? может кинешь архив проекта.

Randomize 14.06.2009 00:15

Ответ: Как приделать к BlitzMax DLL
 
Цитата:

Сообщение от dimanche13 (Сообщение 107151)
а скомпилил ты под дебаг и под релиз? может кинешь архив проекта.

Спасибо, но проблема уже решена.
Как ни странно но виной всему проклятые вирусы, после того как восстановил с образа винч всё стало работать как положено.
Зря я шум поднял, прошу прощения.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot