Нужна помощь C->PB

Раздел посвящен программированию с использованием Power Basic.
Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Нужна помощь C->PB

Сообщение Lapex » 25.02.2008 (Пн) 18:42

Уважаемые гуру помогите пожалуйста с кодом, нужен аналог C-функции:
Код: Выделить всё
// szBuffer - [out] A pointer to a character buffer
// that will receive the name of the plugin.
// pnBufferSize - [in/out] A pointer to an integer
// that contains the number of characters in szBuffer
// on the way in and will be set to the number of characters
// actually copied to the buffer on the way out.

char szObjectName[] = "MyObject";

int GetName(char* szBuffer, int* pnBufferSize)
{
    int nLength = lstrlen(szObjectName);
    if(*pnBufferSize < nLength)
    {
        *pnBufferSize = nLength;
        return -1;
    } else
    {
        memset(szBuffer,0,*pnBufferSize);
        lstrcpy(szBuffer,szObjectName);
        return nLength;
    }
}

Моя попытка на PB:
Код: Выделить всё
FUNCTION GetName ALIAS "GetName" (BYVAL szBuffer AS DWORD, BYVAL pnBufferSize AS LONG) EXPORT AS LONG
    DIM nLength AS LONG
    DIM szObjectName AS ASCIIZ * 80

    szObjectName = "MyObject"

    nLength = lstrlen(szObjectName)
    IF(pnBufferSize < nLength) THEN
        pnBufferSize = nLength
        FUNCTION = -1
    ELSE
        lstrcpy(BYVAL szBuffer, szObjectName)
        FUNCTION = nLength
    END IF
END FUNCTION


Заранее благодарен за любой совет, а если с примером, то это будет просто здорово.

P.S. Сильно не пинайте, я только учусь :oops:.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 25.02.2008 (Пн) 18:58

Моя попытка на PB:


С первого взгляда - код на PB совершенно неправильный. Кстати, что делает эта функция?

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 25.02.2008 (Пн) 19:53

Ф-ция возвращает число символов cкопированных в буфер или -1, если буфер не достаточно большой, чтобы содержать имя плагина.
Имя плагина: "MyObject".

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 25.02.2008 (Пн) 21:19

Вот код

Код: Выделить всё
Function GetName Alias "GetName" (ByVal szBuffer As String, ByVal pnBufferSize As Long) Export As Long
                             
Dim szObjectName As String
szObjectName = "MyObject"

If Len(szBuffer)>Len(szObjectName) Then
     Function=-1
  Else
     Function=Len(szBuffer)
End If
 
End Function
               

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 25.02.2008 (Пн) 22:16

А почему возвращается кол-во символов - 4, а не 8?
Мой код возвращает 8, но мой код я так понимаю не корректный.

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 25.02.2008 (Пн) 22:50

сорри, был не внимателен :oops:, не обратил внимание на изменение типа... ByVal szBuffer As DWORD > ByVal szBuffer As String.
Большое Спасибо!

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 26.02.2008 (Вт) 10:22

И еще маленький вопросик.
У меня возникли сомнения в корректности указания параметров ф-ции. В комметарии к ф-ции (см. 1-й пост) говорится, что szBuffer - [out], а pnBufferSize - [in/out]. Я предполагаю, что [out] и [in/out] - это BYREF или я не прав?

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 26.02.2008 (Вт) 10:29

Поскольку, функция возвращает только количество символов скопированных в буфер, способ передачи параметров в функцию не имеет значения.

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 26.02.2008 (Вт) 10:42

Я пытаюсь сделать плагин, руководствуясь SDK, в котором разработчики могли открыть не все карты и по этому я не уверен в том, что ф-ция возвращает "только" количество символов... , как-то же программа должна получить имя плагина. По этому у меня возникло предположение, что параметры должны быть BYREF.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 26.02.2008 (Вт) 11:26

Ну так в чем проблема? Сделай два варианта плагина с ByRef и ByVal и проверь какой из них работает

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 26.02.2008 (Вт) 11:47

Просто я хотел избежать недоразумений на раннем этапе разработки, т.к. я сразу не могу проверить работоспособность из-за необходимости написания еще ряда дополнительных ф-ций, необходимых для подключения плагина.

Еще раз Большое Спасибо за помощь, буду пробовать.

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 02.03.2008 (Вс) 1:02

Пожалуйста не откажите еще раз в помощи.
Уже на финише споткнулся с заполнением структурного массива :(.

Вариант на C:
Код: Выделить всё
typedef struct luaL_reg {
  const char *name;
  lua_CFunction func;
} luaL_reg;

const luaL_reg tab_funcs[] = {
      {"MyFunc1", Func1},
      {"MyFunc2", Func2},
      {NULL, NULL}

Мой вариант на PB (не рабочий :oops:):
Код: Выделить всё
MACRO LUA_CFUNCTION = DWORD

TYPE LUAL_REG
    pszname AS ASCIIZ PTR
    pfunc AS LUA_CFunction
END TYPE


DIM F1 AS ASCIIZ  PTR
DIM F2 AS ASCIIZ  PTR

@F1 = "MyFunc1"
@F2 = "MyFunc2"

DIM tab_funcs(3) AS LUAL_REG

tab_funcs.pszname(1)=@F1
tab_funcs.pfunc(1)=CODEPTR(Func1)
tab_funcs.pszname(2)=@F2
tab_funcs.pfunc(2)=CODEPTR(Func2)
tab_funcs.pszname(3)=0
tab_funcs.pfunc(3)=0


"MyFunc1" и "MyFunc2" - имена ф-ций, которые будут доступны в программе вызывающей мой плагин (DLL).
Func1 и Func2 - ф-ции моего плагина (DLL).

P.S. Тип LUAL_REG менять не могу, в таком виде он объявлен в подключаемой библиотеке LuaLib_h.inc.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 02.03.2008 (Вс) 19:00

Lapex - ты скриптовый движок Lua подключаешь? Если да, то есть готовое решение на PB от Marco Pontello

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 02.03.2008 (Вс) 20:57

Да, PowerBLua я пробовал, но когда я его использую - программа перестает видеть плагин :(. Буду разбираться дальше.

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 04.03.2008 (Вт) 12:52

Ребята, ну помогите пожалуйста, уже голова пухнет, очень нужен аналог кода:

Вариант на C:
Код: Выделить всё
const luaL_reg tab_funcs[] = {
      {"MyFunc1", Func1},
      {"MyFunc2", Func2},
      {NULL, NULL}
   };

luaL_openlib(L, "MyArray", tab_funcs, 0);


Вариант на FreeBasic:
Код: Выделить всё
const luaL_reg tab_funcs[] = {
dim shared as luaL_reg tab_funcs (3) =>{ _
        (@"MyFunc1",      @MyFunc1), _
        (@"MyFunc2",      @MyFunc2), _
        (0, 0)_
        }

luaL_openlib(L, @"MyArray", @tab_funcs(0), 0)


Вариант на PowerBasic: :oops:
Код: Выделить всё
???

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 04.03.2008 (Вт) 13:40

Посмотри готовые PB хидеры к Lua5, может это тебе поможет

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 04.03.2008 (Вт) 13:41

LUA_H.INC

Код: Выделить всё
#IF 0
'//////////////////////////////////////////////////////
'/ LUA_H.INC
'/
'/ Macro and definitions relating to Lua5.dll
'/ Lua is Copyright (c) 1994-2003 Tecgraf, PUC-Rio
'/
'/ Ported to PowerBASIC by: Florent Heyworth
'/ Date: updated to Lua5 14-February-2004
'/
'/ Notes: The lualib5.dll declares are to be found
'/ in lualib_h.inc and should also be included
'/ in your programs.
'/
'//////////////////////////////////////////////////////

#ENDIF

#IF NOT %DEF(%LUA_H_INC)
%LUA_H_INC = 1

MACRO LUA_DLL = "lua5.dll" 'change name to reflect DLL name of Lua core
MACRO LUA_API = CDECL 'use CDECL convention

MACRO LUA_VERSION_API  ="Lua 5.0.1"
MACRO LUA_COPYRIGHT ="Copyright (C) 1994-2003 Tecgraf, PUC-Rio"
MACRO LUA_AUTHORS   ="R. Ierusalimschy, L. H. de Figueiredo & W. Celes"

'option for multiple returns in `lua_pcall' and `lua_call'
MACRO LUA_MULTRET   =-1&

'pseudo-indices
MACRO LUA_REGISTRYINDEX =-10000&
MACRO LUA_GLOBALSINDEX = -10001&
MACRO LUA_UPVALUEINDEX(i) = LUA_GLOBALSINDEX -i

'error codes for `lua_load' and `lua_pcall'
MACRO LUA_ERRRUN    = 1
MACRO LUA_ERRFILE   = 2
MACRO LUA_ERRSYNTAX = 3
MACRO LUA_ERRMEM    = 4
MACRO LUA_ERRERR    = 5

MACRO LUA_STATE     = DWORD
MACRO LUA_CFUNCTION = DWORD

MACRO LUA_TNONE     = -1
MACRO LUA_TNIL      = 0
MACRO LUA_TBOOLEAN  = 1
MACRO LUA_TLIGHTUSERDATA = 2
MACRO LUA_TNUMBER   = 3
MACRO LUA_TSTRING   = 4
MACRO LUA_TTABLE    = 5
MACRO LUA_TFUNCTION = 6
MACRO LUA_TUSERDATA = 7
MACRO LUA_TTHREAD   = 8

'minimum Lua stack available to a function
MACRO LUA_MINSTACK  = 20

MACRO LUA_NUMBER    = DOUBLE
MACRO ASCIIZ_PTR    = DWORD

'state manipulation
DECLARE FUNCTION lua_open LUA_API LIB LUA_DLL ALIAS "lua_open"() AS LUA_STATE
DECLARE SUB lua_close LUA_API LIB LUA_DLL ALIAS "lua_close"(BYVAL L AS LUA_STATE)
DECLARE FUNCTION lua_newthread LUA_API LIB LUA_DLL ALIAS "lua_newthread"(BYVAL L AS LUA_STATE) AS LUA_STATE

DECLARE FUNCTION lua_atpanic LUA_API LIB LUA_DLL ALIAS "lua_atpanic"(BYVAL L AS LUA_STATE, BYVAL panic_callback AS DWORD ) AS LUA_CFUNCTION

'basic stack manipulation
DECLARE FUNCTION lua_gettop LUA_API LIB LUA_DLL ALIAS "lua_gettop"(BYVAL L AS LUA_STATE) AS LONG
DECLARE SUB lua_settop LUA_API LIB LUA_DLL ALIAS "lua_settop"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG)
DECLARE SUB lua_pushvalue LUA_API LIB LUA_DLL ALIAS "lua_pushvalue"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG)
DECLARE SUB lua_remove LUA_API LIB LUA_DLL ALIAS "lua_remove"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG)
DECLARE SUB lua_insert LUA_API LIB LUA_DLL ALIAS "lua_insert"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG)
DECLARE SUB lua_replace LUA_API LIB LUA_DLL ALIAS "lua_replace"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG)
DECLARE FUNCTION lua_checkstack LUA_API LIB LUA_DLL ALIAS "lua_checkstack"(BYVAL L AS LUA_STATE, BYVAL SIZE AS LONG) AS LONG

DECLARE SUB lua_xmove LUA_API LIB LUA_DLL ALIAS "lua_xmove"(BYVAL from_state AS LUA_STATE, BYVAL to_state AS LONG, BYVAL n AS LONG)

'access functions (stack -> C)
DECLARE FUNCTION lua_isnumber LUA_API LIB LUA_DLL ALIAS "lua_isnumber"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS LONG
DECLARE FUNCTION lua_isstring LUA_API LIB LUA_DLL ALIAS "lua_isstring"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS LONG
DECLARE FUNCTION lua_iscfunction LUA_API LIB LUA_DLL ALIAS "lua_iscfunction"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS LONG
DECLARE FUNCTION lua_userdata LUA_API LIB LUA_DLL ALIAS "lua_isuserdata"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS LONG
DECLARE FUNCTION lua_type LUA_API LIB LUA_DLL ALIAS "lua_type"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS LONG
DECLARE FUNCTION lua_typename LUA_API LIB LUA_DLL ALIAS "lua_typename"(BYVAL L AS LUA_STATE, BYVAL typeof AS LONG) AS ASCIIZ_PTR

DECLARE FUNCTION lua_equal LUA_API LIB LUA_DLL ALIAS "lua_equal"(BYVAL L AS LUA_STATE, BYVAL idx1 AS LONG, BYVAL idx2 AS LONG) AS LONG
DECLARE FUNCTION lua_rawequal LUA_API LIB LUA_DLL ALIAS "lua_rawequal"(BYVAL L AS LUA_STATE, BYVAL idx1 AS LONG, BYVAL idx2 AS LONG) AS LONG
DECLARE FUNCTION lua_lessthan LUA_API LIB LUA_DLL ALIAS "lua_lessthan"(BYVAL L AS LUA_STATE, BYVAL idx1 AS LONG, BYVAL idx2 AS LONG) AS LONG

DECLARE FUNCTION lua_tonumber LUA_API LIB LUA_DLL ALIAS "lua_tonumber"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS LUA_NUMBER
DECLARE FUNCTION lua_toboolean LUA_API LIB LUA_DLL ALIAS "lua_toboolean"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS LONG
DECLARE FUNCTION lua_tostring LUA_API LIB LUA_DLL ALIAS "lua_tostring"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS ASCIIZ_PTR
DECLARE FUNCTION lua_strlen LUA_API LIB LUA_DLL ALIAS "lua_strlen"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS LONG
DECLARE FUNCTION lua_tocfunction LUA_API LIB LUA_DLL ALIAS "lua_tocfunction"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS LUA_CFUNCTION
DECLARE FUNCTION lua_touserdata LUA_API LIB LUA_DLL ALIAS "lua_touserdata"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS DWORD
DECLARE FUNCTION lua_tothread LUA_API LIB LUA_DLL ALIAS "lua_tothread"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS LUA_STATE
DECLARE FUNCTION lua_topointer LUA_API LIB LUA_DLL ALIAS "lua_topointer"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS DWORD

'push functions (C->Stack)
DECLARE SUB lua_pushnil LUA_API LIB LUA_DLL ALIAS "lua_pushnil"(BYVAL L AS LUA_STATE)
DECLARE SUB lua_pushnumber LUA_API LIB LUA_DLL ALIAS "lua_pushnumber"(BYVAL L AS LUA_STATE, BYVAL n AS LUA_NUMBER)
DECLARE SUB lua_pushlstring LUA_API LIB LUA_DLL ALIAS "lua_pushlstring"(BYVAL L AS LUA_STATE, BYREF sz AS ASCIIZ, BYVAL length AS LONG)
DECLARE SUB lua_pushstring LUA_API LIB LUA_DLL ALIAS "lua_pushstring"(BYVAL L AS LUA_STATE, BYREF sz AS ASCIIZ)
DECLARE FUNCTION lua_pushfstring LUA_API LIB LUA_DLL ALIAS "lua_pushfstring"(BYVAL L AS LUA_STATE, BYREF fmt AS ASCIIZ, _
OPT BYVAL a AS ANY, OPT BYVAL b AS ANY, OPT BYVAL c AS ANY, OPT BYVAL d AS ANY, OPT BYVAL e AS ANY, OPT BYVAL f AS ANY, _
OPT BYVAL g AS ANY) AS ASCIIZ_PTR
DECLARE SUB lua_pushclosure LUA_API LIB LUA_DLL ALIAS "lua_pushcclosure"(BYVAL L AS LUA_STATE, BYVAL fn AS LUA_CFUNCTION, BYVAL n AS LONG)
DECLARE SUB lua_pushboolean LUA_API LIB LUA_DLL ALIAS "lua_pushboolean"(BYVAL L AS LUA_STATE, BYVAL b AS LONG)
DECLARE SUB lua_pushlightuserdata LUA_API LIB LUA_DLL ALIAS "lua_pushlightuserdata"(BYVAL L AS LUA_STATE, BYVAL p AS DWORD)

'get functions (LUA->Stack)
DECLARE SUB lua_gettable LUA_API LIB LUA_DLL ALIAS "lua_gettable"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG)
DECLARE SUB lua_rawget LUA_API LIB LUA_DLL ALIAS "lua_rawget"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG)
DECLARE SUB lua_rawgeti LUA_API LIB LUA_DLL ALIAS "lua_rawgeti"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG, BYVAL n AS LONG)
DECLARE SUB lua_newtable LUA_API LIB LUA_DLL ALIAS "lua_newtable"(BYVAL L AS LUA_STATE)
DECLARE FUNCTION lua_newuserdata LIB LUA_DLL ALIAS "lua_newuserdata"(BYVAL L AS LUA_STATE, BYVAL SIZE AS LONG) AS DWORD
DECLARE FUNCTION lua_getmetatable LIB LUA_DLL ALIAS "lua_getmetatable"(BYVAL L AS LUA_STATE, BYVAL SIZE AS LONG) AS LONG
DECLARE SUB lua_getfenv LUA_API LIB LUA_DLL ALIAS "lua_getfenv"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG)

'set functions (Stack->LUA)
DECLARE SUB lua_settable LUA_API LIB LUA_DLL ALIAS "lua_settable"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG)
DECLARE SUB lua_rawset LUA_API LIB LUA_DLL ALIAS "lua_rawset"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG)
DECLARE SUB lua_rawseti LUA_API LIB LUA_DLL ALIAS "lua_rawseti"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG, BYVAL n AS LONG)
DECLARE FUNCTION lua_setmetatable LUA_API LIB LUA_DLL ALIAS "lua_setmetatable"(BYVAL L AS LUA_STATE, BYVAL objindex AS LONG) AS LONG
DECLARE FUNCTION lua_setfenv LUA_API LIB LUA_DLL ALIAS "lua_setfenv"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS LONG

'`load' and `call' functions (load and run Lua code)
DECLARE SUB lua_call LUA_API LIB LUA_DLL ALIAS "lua_call"(BYVAL L AS LUA_STATE, BYVAL nargs AS LONG, BYVAL nresults AS LONG)
DECLARE FUNCTION lua_pcall LUA_API LIB LUA_DLL ALIAS "lua_pcall"(BYVAL L AS LUA_STATE, BYVAL nargs AS LONG, BYVAL nresults AS LONG, _
BYVAL errfunc AS LONG) AS LONG
DECLARE FUNCTION lua_cpcall LUA_API LIB LUA_DLL ALIAS "lua_cpcall"(BYVAL L AS LUA_STATE, BYVAL func AS LUA_CFUNCTION, BYVAL ud AS DWORD) _
AS LONG
DECLARE FUNCTION lua_load LUA_API LIB LUA_DLL ALIAS "lua_load"(BYVAL L AS LUA_STATE, BYVAL reader AS DWORD, BYVAL dt AS DWORD, _
BYREF szchunkname AS ASCIIZ) AS LONG

'coroutine functions
DECLARE FUNCTION lua_yield LUA_API LIB LUA_DLL ALIAS "lua_yield"(BYVAL L AS LUA_STATE, BYVAL narg AS LONG) AS LONG
DECLARE FUNCTION lua_resume LUA_API LIB LUA_DLL ALIAS "lua_resume"(BYVAL L AS LUA_STATE, BYVAL narg AS LONG) AS LONG

'garbage collection functions
DECLARE FUNCTION lua_getgcthreshold LUA_API LIB LUA_DLL ALIAS "lua_getgcthreshold"(BYVAL L AS LUA_STATE) AS LONG
DECLARE FUNCTION lua_getgccount LUA_API LIB LUA_DLL ALIAS "lua_gccount"(BYVAL L AS LUA_STATE) AS LONG
DECLARE SUB lua_setgcthreshold LUA_API LIB LUA_DLL ALIAS "lua_setgcthreshold"(BYVAL L AS LUA_STATE, BYVAL newthreshold AS LONG)

'miscealleneous functions
DECLARE FUNCTION lua_version LUA_API LIB LUA_DLL ALIAS "lua_version" () AS ASCIIZ_PTR
DECLARE FUNCTION lua_error LUA_API LIB LUA_DLL ALIAS "lua_error"(BYVAL L AS LUA_STATE) AS LONG
DECLARE FUNCTION lua_next LUA_API LIB LUA_DLL ALIAS "lua_next"(BYVAL L AS LUA_STATE, BYVAL idx AS LONG) AS LONG
DECLARE SUB lua_concat LUA_API LIB LUA_DLL ALIAS "lua_concat"(BYVAL L AS LUA_STATE, BYVAL n AS LONG)


'useful macro functions
MACRO FUNCTION LUA_DOPOP(L,n)
    MACROTEMP result
    LOCAL result AS LONG

    result = lua_settop(L, -(n)-1)
END MACRO = result

MACRO LUA_PUSHCFUNCTION(L,f)
    CALL lua_pushclosure(L, f, 0)
END MACRO

MACRO LUA_REGISTER(L,n,f)
    CALL lua_pushstring(L,n)
    LUA_PUSHCFUNCTION(L,f)
    CALL lua_settable(L, LUA_GLOBALSINDEX)
END MACRO

MACRO FUNCTION LUA_ISFUNCTION(L,n)
END MACRO = (lua_type(L,n) = LUA_TFUNCTION)

MACRO FUNCTION LUA_ISTABLE(L,n)
END MACRO = (lua_type(L,n) = LUA_TTABLE)

MACRO FUNCTION LUA_ISLIGHTUSERDATA(L,n)
END MACRO = (lua_type(L,n) = LUA_LIGHTUSERDATA)

MACRO FUNCTION LUA_ISNIL(L,n)
END MACRO = (lua_type(L,n) = LUA_TNIL)

MACRO FUNCTION LUA_ISBOOLEAN(L,n)
END MACRO = (lua_type(L,n) = LUA_TBOOLEAN)

MACRO FUNCTION LUA_ISNONE(L,n)
END MACRO = (lua_type(L,n) = LUA_TNONE)

MACRO FUNCTION LUA_ISNONEORNIL(L,n)
END MACRO = (lua_type(L,n) <= 0)

MACRO LUA_PUSHLITERAL(L,s)
    CALL lua_pushstring(L, "", s, (SIZEOF(s)/SIZEOF(BYTE))-1)
END MACRO

'compatibility macros and functions
DECLARE FUNCTION lua_pushupvalues LUA_API LIB LUA_DLL ALIAS "lua_pushupvalues"(BYVAL L AS LUA_STATE) AS LONG

MACRO FUNCTION LUA_GETREGISTRY(L)
END MACRO = lua_pushvalue(L, LUA_REGISTRYINDEX)

MACRO LUA_SETGLOBAL(L,s)
    CALL lua_pushstring(L,s)
    CALL lua_insert(L, -2)
    CALL lua_settable(L, LUA_GLOBALSINDEX)
END MACRO

MACRO FUNCTION LUA_GETGLOBAL(L,s)
    CALL lua_pushstring(L,s)
END MACRO = lua_gettable(L, LUA_GLOBALSINDEX)

'compatibility with ref system
MACRO LUA_NOREF = -2
MACRO LUA_REFNIL= -1

MACRO FUNCTION LUA_REF(L,lua_lock)
    MACROTEMP result
    LOCAL result AS LONG

    IF lua_lock THEN
        result = luaL_ref(L, LUA_REGISTRYINDEX)
    ELSE
        CALL lua_pushstring(L, "unlocked references are obsolete")
        CALL lua_error(L)
        result = 0
    END IF
END MACRO = result

MACRO LUA_UNREF(L,ref)
    CALL luaL_unref(L, LUA_REGISTRYINDEX, ref)
END MACRO

MACRO FUNCTION LUA_GETREF(L,ref)
END MACRO = lua_rawgeti(L, LUA_REGISTRYINDEX, ref)

#ENDIF 'LUA_H_INC

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 04.03.2008 (Вт) 13:42

LUALIB_H.INC

Код: Выделить всё
#IF 0
'//////////////////////////////////////////////////////
'/ LUALIB_H.INC
'/
'/ Macro and definitions relating to Lualib5.dll
'/ Lua is Copyright (c) 1994-2003 Tecgraf, PUC-Rio
'/
'/ Ported to PowerBASIC by: Florent Heyworth
'/ Date: Updated to Lua5 API 14-February-2004
'/
'//////////////////////////////////////////////////////
#ENDIF

#IF NOT %DEF(%LUALIB_H_INC)
%LUALIB_H_INC = 1

#INCLUDE "lua_h.inc"

MACRO LUALIB_DLL = "lualib5.dll" ' change name to reflect DLL name of Lua library
MACRO LUA_LIBAPI = LUA_API

TYPE LUAL_REG
    pszname AS ASCIIZ PTR
    pfunc AS LUA_CFunction
END TYPE

DECLARE SUB luaL_openlib LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_openlib"(BYVAL L AS LUA_STATE, BYREF libname AS ASCIIZ, _
BYREF reg AS LUAL_REG, BYVAL nup AS LONG)
DECLARE FUNCTION luaL_getmetafield LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_getmetafield"(BYVAL L AS LUA_STATE, BYVAL obj AS LONG, _
BYREF e AS ASCIIZ) AS LONG
DECLARE FUNCTION luaL_callmeta LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_callmeta"(BYVAL L AS LUA_STATE, BYVAL obj AS LONG, _
BYREF e AS ASCIIZ) AS LONG
DECLARE FUNCTION luaL_typerror LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_typerror"(BYVAL L AS LUA_STATE, BYVAL narg AS LONG, _
BYREF tname AS ASCIIZ) AS LONG
DECLARE FUNCTION luaL_argerror LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_argerror"(BYVAL L AS LUA_STATE, BYREF extramsg AS ASCIIZ) AS LONG
DECLARE FUNCTION luaL_checklstring LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_checklstring"(BYVAL L AS LUA_STATE, BYVAL numArg AS LONG, _
BYREF length AS LONG) AS ASCIIZ_PTR
DECLARE FUNCTION luaL_optlstring LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_optlstring"(BYVAL L AS LUA_STATE, BYVAL numArg AS LONG, _
BYREF def AS ASCIIZ, BYREF length AS LONG) AS ASCIIZ_PTR
DECLARE FUNCTION luaL_checknumber LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_checknumber"(BYVAL L AS LUA_STATE, BYVAL numArg AS LONG) _
AS LUA_NUMBER
DECLARE FUNCTION luaL_optnumber LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_optnumber"(BYVAL L AS LUA_STATE, BYVAL nArg AS LONG, _
BYVAL def AS LUA_NUMBER) AS LUA_NUMBER

DECLARE SUB luaL_checkstack LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_checkstack"(BYVAL L AS LUA_STATE, BYVAL size AS LONG, _
BYREF msg AS ASCIIZ)
DECLARE SUB luaL_checktype LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_checktype"(BYVAL L AS LUA_STATE, BYVAL narg AS LONG, _
BYVAL t AS LONG)
DECLARE SUB luaL_checkany LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_checkany"(BYVAL L AS LUA_STATE, BYVAL narg AS LONG)

DECLARE FUNCTION luaL_newmetatable LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_newmetatable"(BYVAL L AS LUA_STATE, BYREF tname AS ASCIIZ) _
AS LONG
DECLARE SUB luaL_getmetatable LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_getmetatable"(BYVAL L AS LUA_STATE, BYREF tname AS ASCIIZ)
DECLARE FUNCTION luaL_checkudata LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_checkudata"(BYVAL L AS LUA_STATE, BYVAL ud AS LONG, _
BYREF tname AS ASCIIZ) AS DWORD

DECLARE SUB luaL_where LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_where"(BYVAL L AS LUA_STATE, BYVAL lvl AS LONG)
DECLARE FUNCTION luaL_error LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_error"(BYVAL L AS LUA_STATE, BYREF fmt AS ASCIIZ, _
OPT BYVAL a AS ANY, OPT BYVAL b AS ANY, OPT BYVAL c AS ANY, OPT BYVAL d AS ANY, OPT BYVAL e AS ANY, OPT BYVAL f AS ANY) AS LONG

DECLARE FUNCTION luaL_findstring LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_findstring"(BYREF st AS ASCIIZ, BYREF lst() AS DWORD) AS LONG

DECLARE FUNCTION luaL_ref LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_ref"(BYVAL L AS LUA_STATE, BYVAL t AS LONG) AS LONG
DECLARE SUB luaL_unref LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_unref"(BYVAL L AS LUA_STATE, BYVAL t AS LONG, BYVAL ref AS LONG)

DECLARE FUNCTION luaL_getn LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_getn"(BYVAL L AS LUA_STATE, BYVAL t AS LONG) AS LONG
DECLARE SUB luaL_setn LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_setn"(BYVAL L AS LUA_STATE, BYVAL t AS LONG, BYVAL n AS LONG)

DECLARE FUNCTION luaL_loadfile LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_loadfile"(BYVAL L AS LUA_STATE, BYREF filename AS ASCIIZ) AS LONG
DECLARE FUNCTION luaL_loadbuffer LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_loadbuffer"(BYVAL L AS LUA_STATE, BYREF buff AS ASCIIZ, _
BYVAL size AS LONG, BYREF buffname AS ASCIIZ) AS LONG

'useful macros
MACRO FUNCTION LUAL_ARGCHECK(L,cond,numarg,extramsg)
END MACRO = IIF&( NOT cond, luaL_argerror(L, numarg, extramsg), 0 )

MACRO FUNCTION LUAL_CHECKSTRING(L,n)
    MACROTEMP p
    LOCAL p AS ASCIIZ PTR

    p = luaL_checklstring(L, n, BYVAL %NULL)
END MACRO = IIF$( p, @p, "" )

MACRO FUNCTION LUAL_OPTSTRING(L,n,d)
    MACROTEMP p
    LOCAL p AS ASCIIZ PTR

    p = luaL_optlstring(L, n, d, BYVAL %NULL)
END MACRO = IIF$( p, @p, "" )

MACRO FUNCTION LUAL_CHECKINT(L,n)
END MACRO = CLNG(luaL_checknumber(L,n))

MACRO FUNCTION LUAL_CHECKLONG(L,n)
END MACRO = CQUD(luaL_checknumer(L,n)

MACRO FUNCTION LUAL_OPTINT(L,n,d)
END MACRO = CLNG(luaL_optnumber(L,n,CDBL(d))

MACRO FUNCTION LUAL_OPTLONG(L,n,d)
END MACRO = CQUD(luaL_optnumber(L,n,CDBL(d))

'generic Buffer manipulation
#IF NOT %DEF(%LUAL_BUFFERSIZE)
%LUAL_BUFFERSIZE = 65535&
#ENDIF

TYPE LUAL_BUFFER
    p AS BYTE PTR 'current position in buffer
    lvl AS LONG 'number of strings in the stack (level)
    l AS LUA_STATE
    buffer AS ASCIIZ * %LUAL_BUFFERSIZE
END TYPE

DECLARE FUNCTION luaL_prepbuffer LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_prepbuffer"(BYREF tbuf AS LUAL_BUFFER) AS ASCIIZ_PTR
DECLARE SUB luaL_buffinit LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_buffinit"(BYVAL L AS LUA_STATE, BYREF tbuf AS LUAL_BUFFER)
DECLARE SUB luaL_addlstring LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_addlstring"(BYREF tbuf AS LUAL_BUFFER, BYREF s AS ASCIIZ, _
BYVAL length AS LONG)
DECLARE SUB luaL_addstring LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_addstring"(BYREF tbuf AS LUAL_BUFFER, BYREF s AS ASCIIZ)
DECLARE SUB luaL_addvalue LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_addvalue"(BYREF tbuf AS LUAL_BUFFER)
DECLARE SUB luaL_pushresult LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_pushresult"(BYREF tbuf AS LUAL_BUFFER)

MACRO LUAL_PUTCHAR(B,c) 'B is a LUAL_BUFFER
    IF VARPTR(B.p) >= VARPTR(B.buffer)+LUAL_BUFFERSIZE THEN
        B.p = luaL_prepbuffer(B)
    END IF
    B.@p = ASC(c)
    INCR B.p
END MACRO

MACRO LUAL_ADDSIZE(B,n) 'B is a LUAL_BUFFER
    B.p = B.p + n
END MACRO

'Compatibility macros and functions

DECLARE FUNCTION lua_dofile LUA_LIBAPI LIB LUALIB_DLL ALIAS "lua_dofile"(BYVAL L AS LUA_STATE, BYREF filename AS ASCIIZ) AS LONG
DECLARE FUNCTION lua_dostring LUA_LIBAPI LIB LUALIB_DLL ALIAS "lua_dostring"(BYVAL L AS LUA_STATE, BYREF str AS ASCIIZ) AS LONG
DECLARE FUNCTION lua_dobuffer LUA_LIBAPI LIB LUALIB_DLL ALIAS "lua_dobuffer"(BYVAL L AS LUA_STATE, BYREF buff AS ASCIIZ, _
BYVAL size AS LONG) AS LONG

' standard library definitions
MACRO LUA_COLIBNAME  = "coroutine"
DECLARE FUNCTION luaopen_base LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaopen_base"(BYVAL L AS LUA_STATE) AS LONG

MACRO LUA_TABLIBNAME  = "table"
DECLARE FUNCTION luaopen_table LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaopen_table"(BYVAL L AS LUA_STATE) AS LONG

MACRO LUA_IOLIBNAME   = "io"
MACRO LUA_OSLIBNAME   = "os"
DECLARE FUNCTION luaopen_io LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaopen_io"(BYVAL L AS LUA_STATE) AS LONG

MACRO LUA_STRLIBNAME  = "string"
DECLARE FUNCTION luaopen_string LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaopen_string"(BYVAL L AS LUA_STATE) AS LONG

MACRO LUA_MATHLIBNAME = "math"
DECLARE FUNCTION luaopen_math LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaopen_math"(BYVAL L AS LUA_STATE) AS LONG

MACRO LUA_DBLIBNAME   = "debug"
DECLARE FUNCTION luaopen_debug LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaopen_debug"(BYVAL L AS LUA_STATE) AS LONG

DECLARE FUNCTION luaopen_loadlib LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaopen_loadlib"(BYVAL L AS LUA_STATE) AS LONG

#ENDIF 'LUALIB_H_INC

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 04.03.2008 (Вт) 14:23

Да, именно их я и использую. Если я регистрирую ф-цию с помощью LUA_REGISTER (LUA_H.INC) - все работает, но проблема в формате вызова такой ф-ции, получается типа: MyFunc1(), а мне нужно по соглашеню программы, в формате: MyArray.MyFunc1(), т.е. нужно регистрировать не отдельную ф-цию, а массив ф-ций с помощью luaL_openlib (LUALIB_H.INC), как и сказано в SDK, что у меня и не получается :(. Из-за недостатка опыта работы с PB - я не могу создать корректный код аналогичный приведенному выше на С и FB.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 04.03.2008 (Вт) 14:40

а мне нужно по соглашеню программы, в формате: MyArray.MyFunc1(), т.е. нужно регистрировать не отдельную ф-цию, а массив ф-ций с помощью luaL_openlib (LUALIB_H.INC),


Ерунда какая-то, не может быть никакого массива функций. Может ты имеешь ввиду массив указателей на функции?

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 04.03.2008 (Вт) 14:51

Да, именно это я имел ввиду.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 04.03.2008 (Вт) 16:45

Для взятия адреса функции, используй оператор - CodePtr

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 04.03.2008 (Вт) 16:59

Вот, что я соорудил:
Код: Выделить всё
DIM LF1 AS ASCIIZ PTR
DIM MyArray AS ASCIIZ PTR

@MyArray = "MyPlugin"
@LF1="MyFunction"

DIM tab_funcs(2) AS LUAL_REG PTR

@tab_funcs(1).pszname= LF1
@tab_funcs(1).pfunc=CODEPTR(MyFunction)
@tab_funcs(2).pszname=0
@tab_funcs(2).pfunc=0

luaL_openlib(BYVAL L, BYREF @MyArray, BYREF @tab_funcs(0), BYVAL 0)

Скорее всего, код не верен, т.к. при обращении к ф-ции luaL_openlib - выскакивает ошибка:

Инструкция по адресу "0x017d288f" обратилась к памяти по адресу "0x00000000". Память не может быть "written".

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 04.03.2008 (Вт) 17:12

luaL_openlib(BYVAL L, BYREF @MyArray, BYREF @tab_funcs(0), BYVAL 0)


Вот тут ошибки. BYVAL L - какой тип?
BYREF @MyArray - зачем передавать указатель по ссылке?

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 04.03.2008 (Вт) 17:45

MACRO LUA_STATE = DWORD

DECLARE SUB luaL_openlib LUA_LIBAPI LIB LUALIB_DLL ALIAS "luaL_openlib"(BYVAL L AS LUA_STATE, BYREF libname AS ASCIIZ, BYREF reg AS LUAL_REG, BYVAL nup AS LONG)

Код: Выделить всё
  DIM LF1 AS ASCIIZ PTR

  @LF1="MyFunction"

  DIM tab_funcs(2) AS LUAL_REG PTR

  @tab_funcs(1).pszname= LF1
  @tab_funcs(1).pfunc=CODEPTR(MyFunction)
  @tab_funcs(2).pszname=0
  @tab_funcs(2).pfunc=0

  luaL_openlib(BYVAL L, BYREF "MyPlugin", BYREF @tab_funcs(0), BYVAL 0)


Инструкция по адресу "0x017d287f" обратилась к памяти по адресу "0x00000000". Память не может быть "written".

Код: Выделить всё
  DIM LF1 AS ASCIIZ PTR

  @LF1="MyFunction"

  DIM tab_funcs(2) AS LUAL_REG

  tab_funcs(1).pszname= LF1
  tab_funcs(1).pfunc=CODEPTR(MyFunction)
  tab_funcs(2).pszname=0
  tab_funcs(2).pfunc=0

  luaL_openlib(BYVAL L, BYREF "MyPlugin", BYREF tab_funcs(0), BYVAL 0)


Инструкция по адресу "0x017d285f" обратилась к памяти по адресу "0x00000000". Память не может быть "written".

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 11.03.2008 (Вт) 9:43

Ну, вот кажется удалось прикрутить все функции для подключения плагина, причина вываливания ошибок типа: "Память не может быть written" - оказалась в моей пустой голове :(, просто для некоторых Lua-функций, нужно было предварительно загрузить библиотеку в память. Так, что я приношу извенения jangle за доставленные ему хлопоты и большую благодарность за оказанную помощь. Этот вопрос можно считать закрытым.

У меня возник еще один вопрос не относящийся к этой теме - не хочу создавать лишний топик.

Есть программа для создания проектов с иcпользованием Lua-скрипта.
При вызове моего плагина(DLL) из этой программы - происходит его копирование в папку проекта, но мой плагин использует дополнительные библиотеки (Lua.dll и LuaLib.dll), которые программа не копирует вместе с плагином, т.к. было расчитано на то, что плагин будет написан на C и все его библиотеки будут скомпилированы в один файл(DLL).
Я так понимаю, что мне не удасться вложить Lua.dll и LuaLib.dll, как ресурс, но может быть можно как нибудь засунуть их в плагин(Dll)?

Буду рад любым советам и предложениям.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 11.03.2008 (Вт) 10:50

Есть программа для создания проектов с иcпользованием Lua-скрипта.
При вызове моего плагина(DLL) из этой программы - происходит его копирование в папку проекта, но мой плагин использует дополнительные библиотеки (Lua.dll и LuaLib.dll), которые программа не копирует вместе с плагином, т.к. было расчитано на то, что плагин будет написан на C и все его библиотеки будут скомпилированы в один файл(DLL).


В PB можно слинковать DLL в единый EXE/DLL файл (с Lua.dll я это делал), на официальном форуме, есть пример от Cемена Матусовского. Однако, это дело не для новичка, требуется опыт и дополнительные инструменты для такой сложной "операции"

Я так понимаю, что мне не удасться вложить Lua.dll и LuaLib.dll, как ресурс, но может быть можно как нибудь засунуть их в плагин(Dll)?


Вложить в ресурс можно, а лучше воспользоваться утилитой FILE2ASM.EXE которая позволяет "прошивать" бинарники прямо в EXE/DLL файл. Естественно, во время инициализации твоей DLL она должна будет сохранить "прошитые" DLL в папку с плагином. Это при условии, что ты не будешь "слинковывать" Lua.dll с твоей DLL по примеру Матусовского.
И при этом, ты должен изменить механизм загрузки Lua.dll и LuaLib.dll с неявного через Declare Function на явный через LoadLibrary/GetProcAddress. Т.е. переписать все инклюд-файлы с декларациями Lua функций

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 11.03.2008 (Вт) 12:22

Спасибо. Буду разбираться.

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Сообщение Lapex » 13.03.2008 (Чт) 22:56

В PB можно слинковать DLL в единый EXE/DLL файл (с Lua.dll я это делал)...

Уважаемый jangle, а не мог бы ты выслать проект со слинкованным Lua.dll на lapex@ukr.net, если же конечно он не является коммерческим. Буду очень признателен.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 14.03.2008 (Пт) 12:57

Попробую поискать, эти исходники где-то у меня были. Выложу в форум, если найду

След.

Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList