myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему

> Создание Dll

Теги
Нет тегов для показа
alex82
сообщение 24.2.2009, 21:06
Сообщение #21


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Как будто собралась. victory.gif И вроде даже работает. Во всяком случае тестовый скрипт выполняется нормально.
Прикрепленный файл  PXSqlite3.rar ( 159.33 килобайт ) Кол-во скачиваний: 22
Go to the top of the page
+Quote Post
Setuper
сообщение 24.2.2009, 21:17
Сообщение #22


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Круто!!! Браво alex82! Несколько таблиц в базе создаётся. Буду тестить дальше.
Как у тебя получилось не расскажешь? Горю от нетерпения узнать.
Go to the top of the page
+Quote Post
alex82
сообщение 24.2.2009, 21:30
Сообщение #23


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Цитата(Setuper @ 24.2.2009, 20:17) *
Круто!!! Браво alex82! Несколько таблиц в базе создаётся. Буду тестить дальше.
Как у тебя получилось не расскажешь? Горю от нетерпения узнать.

Прикрепленный файл  PXSqlite3_src.rar ( 372.89 килобайт ) Кол-во скачиваний: 15

Подозреваю что всё дело в собаке (имеется ввиду не животное bad_smile.gif )
Go to the top of the page
+Quote Post
Setuper
сообщение 24.2.2009, 21:32
Сообщение #24


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Не понял о чём ты?
С помощью чего компилил?
Go to the top of the page
+Quote Post
alex82
сообщение 24.2.2009, 21:38
Сообщение #25


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Цитата(Setuper @ 24.2.2009, 20:32) *
Не понял о чём ты?
С помощью чего компилил?

Об этом.
Код
    luaopen_pxsqlite3 = @luaopen_sqlite3         @0  ; luaopen_sqlite3(lua_State *)

Цитата(Setuper @ 24.2.2009, 20:32) *
С помощью чего компилил?

С++ Builder
Go to the top of the page
+Quote Post
Setuper
сообщение 24.2.2009, 21:49
Сообщение #26


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




BDS? Borland Developer Studio?
Go to the top of the page
+Quote Post
alex82
сообщение 24.2.2009, 23:11
Сообщение #27


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Setuper

CodeGear (читай Borland) C++ Builder. Но это не суть важно - C++ Builder прекрасно хавает проекты созданные в BDS, и, я так думаю, BDS схавает проект C++ Builder'а.
Go to the top of the page
+Quote Post
Setuper
сообщение 24.2.2009, 23:42
Сообщение #28


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Просто у меня BDS нету, есть только Builder C++ 6 и Visual studio 6, Visual studio 2005, Visual studio 2008.
C++ Builder 6 не открывает ни проект cbproj, ни bdsproj

Я пытался компилить только на том, что у меня есть, а вообще я приверженец VS.
Go to the top of the page
+Quote Post
alex82
сообщение 24.2.2009, 23:54
Сообщение #29


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Если не лень качать 800 с лишним метров, тогда вот - http://torrents.ru/forum/viewtopic.php?t=365896


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 24.2.2009, 23:58
Сообщение #30


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Спасибо. Скачаю и попробую скомпилить.
Go to the top of the page
+Quote Post
Setuper
сообщение 7.3.2009, 14:00
Сообщение #31


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Создание простейшей либы под API 2 (by Builder C++ 6).

Создаём dll проект (обязательно язык С). Пишем код:
Код
#include "lua.h"
#include "lauxlib.h"
#pragma link "PXLua.lib"

int lua_hello(lua_State *L)
{
  lua_pushstring(L, "Hello World!");
  return 1;
}


Создаём в папке проекта def файл (Define.def)
В созданный файл записываем:
Код
LIBRARY     Project1.dll
DESCRIPTION "Project1"

EXPORTS
    lua_hello = @lua_hello         @1 ; lua_hello(lua_State *)

Сохраняем и добавляем в проект этот самый файл Define.def

Сохраняем проект. Залезаем в настройки компилятора, и ставим calling convention: Register (J)

Строи проект.

После этого пишем lua скрипт:
Код
local Msg = package.loadlib("Project1", "lua_hello")

if Msg then
  Core.SendToAll(Msg())
end


Все необходимые заголовочные файлы прикладываю:Прикрепленный файл  files.rar ( 13.27 килобайт ) Кол-во скачиваний: 18
Go to the top of the page
+Quote Post
alex82
сообщение 7.3.2009, 16:08
Сообщение #32


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Если библиотека не создаёт ни одной функции, которую можно вызвать из скрипта, то при чём здесть вообще API2? Это обычная DLL-библиотека. confuse.gif
Go to the top of the page
+Quote Post
Setuper
сообщение 7.3.2009, 16:13
Сообщение #33


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




А смысл тогда создавать библиотеку?
Библиотеку нужно создавать для того, чтобы взаимодействовали функции СИ с функциями LUA (в контексте данного форума).
Go to the top of the page
+Quote Post
alex82
сообщение 7.3.2009, 18:18
Сообщение #34


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Ну ладно.

Тады продолжим в том же духе.

Создание библиотеки под API2
Урок второй: Вызов WinAPI функции из Lua-скрипта.
Необходимые инструменты:
* PtokaX 0.4.x.x
* Borland C++ Builder
* Текстовый редактор с подсветкой кода C (в принципе, можно использовать редактор встроенный в C++ Builder, но лично мне он не очень нравится)
* А также клавиатура, мышь, и немного мозга big_smile.gif


1. Создаём проект DLL-библиотеки (на языке C), и сразу же лезем в его настройки (Project -> Options). Здесь выбираем Build configuration - Base, переходим на вкладку C++ Compiler -> General compilation, и меняем опцию Calling convention на Fastcall (Register). Далее переходим на на вкладку Linker -> Linking, и отключаем пункт Dynamic RTL. Ну вот, с настройками вроде разобрались. Теперь переименуем проект. Назовём его, ну, скажем, PXHello. big_smile.gif

2. Пишем код:
Код
#include <windows.h>    //Это необходимо для использования функций WinAPI
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#pragma comment(lib, "PXLua.lib")

//Собственно, это и есть функция, которую мы будем вызывать из Lua-скрипта:
static int msgbox (lua_State *L) {    //Функциям, вызываемым из Lua-скриптов, всегда передаётся только один аргумент - адрес массива lua_State, который содержит информацию о состоянии Lua
//При вызове функции из скрипта, её аргументы помещаются в стек.
    const char *header = luaL_checkstring (L, 1);    //Забираем из стека первый аргумент функции
    const char *text = luaL_checkstring (L, 2);    //Забираем из стека второй аргумент функции
    MessageBox(0,text,header,0);    //Вызываем функцию WinAPI MessageBox
    return 0;    
}

//Массив luaL_reg, содержащий список функций, которые можно будет вызвать  из скрипта. В нашем случае функция всего одна.
static const struct luaL_reg functions[] = {
    {"MessageBox", msgbox},
    {NULL, NULL},    //Так всегда должен выглядеть последний элемент массива luaL_reg
};

//Функция, вызываемая при инициализации библиотеки:
int libinit (lua_State *L)
{
    luaL_register (L, "Win", functions);    //Второй аргумент - имя таблицы, в которую будут помещены функции, доступные из скриптов, третий аргумент - адрес массива luaL_reg (См. выше)
    return 1;
}

Далее создаём в папке проекта файл с расширением .def (имя файла может быть любым), и добавляем в него следующее:
Код
LIBRARY     PXHello.dll

EXPORTS
    luaopen_pxhello =@libinit         @0  ; libinit(lua_State *)

После чего добавляем файл в проект.

3. Сохраняем проект и компилируем библиотеку.

4. Пишем скрипт:
Код
require "pxhello"

function OnStartup()
    Win.MessageBox("Hello World!!!", "Фигасе!!! Это работает!")    --Первый аргумент - заголовок окна сообщения, второй - текст, отображаемый в окне
end

Если Вы всё сделали правильно, то при запуске скрипта появится сообщение:
Прикрепленный файл  2009_03_07_165023.gif ( 3.22 килобайт ) Кол-во скачиваний: 1

Ну, вроде бы всё. Во всяком случае на сегодня. big_smile.gif

Да, чуть не забыл.

Прикрепленный файл  PXHello.rar ( 46.26 килобайт ) Кол-во скачиваний: 25
Прикрепленный файл  PXHello_source.rar ( 14.23 килобайт ) Кол-во скачиваний: 25


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 7.3.2009, 18:28
Сообщение #35


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Ага. Хорошо. Знакомая шняга (где-то я уже об этом же писал))).

Потихоньку может народ начнёт после прочтения данных статей писать нечто путнее.
Go to the top of the page
+Quote Post
alex82
сообщение 7.3.2009, 18:42
Сообщение #36


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Цитата(Setuper @ 7.3.2009, 17:28) *
Знакомая шняга
И вовсе не шняга, а динамическая библиотека. А шняга - это, как мне подсказывает интуиция, нечто статическое. bad_smile.gif
Цитата(Setuper @ 7.3.2009, 17:28) *
где-то я уже об этом же писал
Где?
Go to the top of the page
+Quote Post
Setuper
сообщение 7.3.2009, 18:46
Сообщение #37


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Шняга - это общее понятие, никакая это на библиотека)))
Go to the top of the page
+Quote Post
Jonathan
сообщение 31.12.2010, 5:32
Сообщение #38


Абсолютный новичок


Группа: Пользователи
Сообщений: 4
Регистрация: 3.12.2010
Пользователь №: 8 197
Спасибо сказали: 0 раз




а как создать dll в delphi? cdecl меня убивает
в инете нарыл хидеры для delphi, но они для старых версий lua
Go to the top of the page
+Quote Post
Jonathan
сообщение 17.2.2011, 8:47
Сообщение #39


Абсолютный новичок


Группа: Пользователи
Сообщений: 4
Регистрация: 3.12.2010
Пользователь №: 8 197
Спасибо сказали: 0 раз




попытался перевести второй код под Delphi
но выходит ошибка, не понимаю в чем дело
помогите плиз!!!

PtokaX 0.4.1.2 (lua версии 5.1.4?)

Код
library PXHello2;

uses
  Windows;

type
  lua_State = record
  end;
  Plua_State = ^lua_State;
  
  size_t = Integer;
  Psize_t = ^size_t;
  
  PLuaFunc = ^TLuaFunc;
  TLuaFunc = function (L: Plua_State): Integer; cdecl;

  PluaL_reg = ^TluaL_reg;
  TluaL_reg = packed record
    Name: PChar;
    Func: PLuaFunc;
  end;

const
  pxlib = 'pxlua.dll';
  
function luaL_checklstring(L: Plua_State; numArg: Integer; s: Psize_t): PChar; cdecl external pxlib name '@luaL_checklstring';
procedure luaL_register(L: Plua_State; libname: PChar; const R: PluaL_reg); cdecl external pxlib name '@luaL_register';
                        
function luaL_checkstring(L: Plua_State; N: Integer): PChar;
begin
  Result := luaL_checklstring(L, N, nil);
end;

//Собственно, это и есть функция, которую мы будем вызывать из Lua-скрипта:
function msgbox (L: Plua_State): Integer; cdecl;     //Функциям, вызываемым из Lua-скриптов, всегда передаётся только один аргумент - адрес массива lua_State, который содержит информацию о состоянии Lua
var
  header, text: PChar;
begin
    //При вызове функции из скрипта, её аргументы помещаются в стек.
    header := luaL_checkstring (L, 1);    //Забираем из стека первый аргумент функции
    text := luaL_checkstring (L, 2);    //Забираем из стека второй аргумент функции
    MessageBox(0, text, header, 0);    //Вызываем функцию WinAPI MessageBox
    result := 0;    
end;

//Массив luaL_reg, содержащий список функций, которые можно будет вызвать  из скрипта. В нашем случае функция всего одна.
const
  functions: array [0..1] of TluaL_reg = (
    (Name: 'MessageBox'; Func: @msgbox),
    (Name: nil; Func: nil)    //Так всегда должен выглядеть последний элемент массива luaL_reg
  );

//Функция, вызываемая при инициализации библиотеки:
function luaopen_pxhello2(L: Plua_State): Integer; cdecl;
begin
    luaL_register(L, 'Win', @functions);    //Второй аргумент - имя таблицы, в которую будут помещены функции, доступные из скриптов, третий аргумент - адрес массива luaL_reg (См. выше)
  result := 1;
end;

exports
  luaopen_pxhello2;

begin
end.


PS: и вообще существуют ли в природе хидеры под новый луа? (под delphi естественно)
Go to the top of the page
+Quote Post
Setuper
сообщение 17.2.2011, 9:53
Сообщение #40


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Ну и откуда у тебя компилятор узнает о том, что такое, например, TLuaFunc ?
Go to the top of the page
+Quote Post

3 страниц V  < 1 2 3 >
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts Topic has attachmentsСоздание хаба
не получается
7 sadira 10 009 29.8.2017, 18:21 Посл. сообщение: Tsd
No New Posts Реклама хабов с помощью создание сборок
8 dj_crazy_joker 10 789 11.2.2012, 12:52 Посл. сообщение: dj_crazy_joker
No New Posts Создание текстовых квестов на LUA
0 Enyby 8 069 18.9.2011, 12:36 Посл. сообщение: Enyby
No new Topic has attachmentsСоздание динамических страниц с помощью Lua
Пишем сайты на Lua
17 alex82 31 290 17.8.2011, 19:20 Посл. сообщение: mariner
No New Posts От: Создание динамических страниц с помощью Lua
От темы с ID: 4750
0 Saymon21 5 214 22.5.2011, 21:13 Посл. сообщение: Saymon21
No new Topic has attachmentsСоздание Контекстных Менюшек Средствами Клиента
38 Setuper 51 450 4.11.2010, 12:43 Посл. сообщение: Ksan
No New Posts Создание списка пользователей
0 STAJIKER 5 474 10.3.2010, 21:16 Посл. сообщение: STAJIKER
No New Posts Создание на основе DC бизнес приложения.
Доработать DC клиент и хаб для ведения коммерческой деятельности.
8 KAA 12 287 3.8.2009, 12:09 Посл. сообщение: Setuper
No New Posts От: Создание базы и юзера в MySQL
От темы с ID: 1828
1 Uncle_Dif 6 734 2.7.2009, 19:25 Посл. сообщение: Uncle_Dif
No New Posts ВАЖНО: Topic has attachmentsСоздание базы и юзера в MySQL
Для скриптов
2 mariner 21 665 22.4.2009, 21:52 Посл. сообщение: Otshelnik-Fm
Closed Создание Паролей.
2 Howl 7 375 15.3.2009, 17:41 Посл. сообщение: Howl

 



RSS Сейчас: 27.11.2024, 1:01