Перейти к содержанию

Подключение своей dll в СЕ


Vlad2

Рекомендуемые сообщения

Всем привет!

Помогите разобраться.

У меня есть dll, в ней есть функция GetHandle, мне нужно подключить dll и вызвать эту функцию в СЕ, чтоб та вернула мне параметр.

Делал так:


mydll = require("gethandel")
Handele = mydll:GetHandle()
showMessage(Handele)

Не получается.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Всем привет!

Помогите разобраться.

У меня есть dll, в ней есть функция GetHandle, мне нужно подключить dll и вызвать эту функцию в СЕ, чтоб та вернула мне параметр.

Делал так:

mydll = require("gethandel")Handele = mydll:GetHandle()showMessage(Handele)
Не получается.

 

Handle написан 3 раза и 3 раза по-разному. Уверен, что здесь нигде ошибка не закралась?

Ссылка на комментарий
Поделиться на другие сайты

Поговорил с одним человеком и получилось сделать подключение своей дллки. Использовал Codeblocks, компилятор MinGW. Библиотека собрана для 64-битной версии CE, можно для 32. Внутри архива .dll, .h и .cpp. Реализовал одну функцию printString, выводящую в messagebox'е переданную ей строку.

Для подключения к скрипту CE нужно написать следующее:

printString = package.loadlib("D:\\load_my_Lib64.dll", "printString") --загрузка функции из библиотекиprintString("123") --вызов для строкиprintString(123)--вызов для числа

Путь написал для примера, главное ставить \\ в пути.

 

Версия CE 6.4. Главное чтобы в корне были библиотеки луа 5.1

 

Пароль от архива: gamehacklab.ru

 

Будет больше времени и интерес к теме напишу подробнее.

DLLka+CPPH.rar

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Поговорил с одним человеком и получилось сделать подключение своей дллки. Использовал Codeblocks, компилятор MinGW. Библиотека собрана для 64-битной версии CE, можно для 32. Внутри архива .dll, .h и .cpp. Реализовал одну функцию printString, выводящую в messagebox'е переданную ей строку.

Для подключения к скрипту CE нужно написать следующее:

printString = package.loadlib("D:\\load_my_Lib64.dll", "printString") --загрузка функции из библиотекиprintString("123") --вызов для строкиprintString(123)--вызов для числа
Путь написал для примера, главное ставить \\ в пути.

 

Версия CE 6.4. Главное чтобы в корне были библиотеки луа 5.1

 

Пароль от архива: gamehacklab.ru

 

Будет больше времени и интерес к теме напишу подробнее.

Ты издеваешься что ли сейчас? Ты мой пост в этой теме читал вообще?

Ссылка на комментарий
Поделиться на другие сайты

Coder, A1t0r, Спасибо. С функцией вызова dllки разобрался, но вот возникла проблемма с написанием dllлок на Delphi.

library Project2; uses  SysUtils,  Classes; {$R *.res} function Symma(a,b:integer):Integer;stdcall;begin  Result :=a+b;end; exports Symma; beginend.

Вот код dllки, функция вычисляет сумму 2 чисел, передаваемых ей и возвращает результат.

 

Использование в СЕ.

Symma = package.loadlib("D:\\Program Files (x86)\\Cheat Engine 6.4\\Project2.dll", "Symma")res = Symma(1, 2)print(res)

Программа сообщает о неопределенной ошибке.

 

Поясните, что нетак!

Ссылка на комментарий
Поделиться на другие сайты

Ты издеваешься что ли сейчас? Ты мой пост в этой теме читал вообще?

 

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

 

Сразу видно, даже не заглядывал в программу. Что-то по той ссылке нету примера с передачей параметра в функцию. Без состояния стека можно только вызывать отдельные функции MessageBox, например, таким образом никак не получит извне строку для вывода.

Программа сообщает о неопределенной ошибке.

 

Поясните, что нетак!

 

Текст неопределённой ошибки можно увидеть?

Ссылка на комментарий
Поделиться на другие сайты

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

 

Сразу видно, даже не заглядывал в программу. Что-то по той ссылке нету примера с передачей параметра в функцию. Без состояния стека можно только вызывать отдельные функции MessageBox, например, таким образом никак не получит извне строку для вывода.

Что-то больно подозрительные слова. LUA написан Си, а стало быть вызвать функции из сишной длл-ки 100% можно осуществить без каких либо проблем. Хочешь сказать, что функцию, объявленную так - extern "C" __declspec(dllexport) не получится вызвать?
Ссылка на комментарий
Поделиться на другие сайты

Во! Работает на 64-битной версии CE, а на 32 - нет.

Нужен способ реализации такой dllки на Delphi, исходник в студию))

 

Извиняйте пишу на C. Для 32-битной версии нужно при сборке подключать 32x версию.

main.cpp:

main.h:

 

Но нужен ещё файл для импорта библиотеки lua5.1-32 или lua5.1-64 (.a для gcc, .lib для C компиляторов). Библиотеку нужно собирать из исходников луа соответствующей версии.

#include "main.h"#include <lua.hpp>int DLL_EXPORT Symma(lua_State* L){    if (lua_gettop(L)>0) {        if (lua_isnumber(L, 1) && lua_isnumber(L, 2)) {            const float a = lua_tonumber(L, 1);            const float b = lua_tonumber(L, 2);            lua_pushnumber (L, lua_Number(a+);            return 1;        }        else            MessageBoxA(0, "Not number!", "DLL Message", MB_OK | MB_ICONINFORMATION);    }    else        MessageBoxA(0, "No arguments!", "DLL Message", MB_OK | MB_ICONINFORMATION);    return 0;}extern "C" BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){    return TRUE;}
#ifndef __MAIN_H__#define __MAIN_H__#include <windows.h>#include <lua.hpp>#ifdef BUILD_DLL    #define DLL_EXPORT __declspec(dllexport)#else    #define DLL_EXPORT __declspec(dllimport)#endif#ifdef __cplusplusextern "C"{#endifint DLL_EXPORT Symma(lua_State* L);#ifdef __cplusplus}#endif#endif // __MAIN_H__
Ссылка на комментарий
Поделиться на другие сайты

Ах жаль((

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

 

Есть реализация lua для delphi. нужно только найти справочник АПИ.

 

А лучше зайди сюда

Ссылка на комментарий
Поделиться на другие сайты

A1t0r, вот.

Что-то нашел, но пока нет времени разбираться.

 

Если нужно создавать библиотеки для вставки их в CE, то подобные приблуды от сторонних разработчиков не подойдут. Необходимо собрать динамическую библиотеку из исходников lua версии 5.1, и использовать для своей получившийся файл .lib, как я уже писал в 13 посте. Если всё сделано правильно, то можно сделать файл .def в котором должны будут написаны экспортируемые функции. Скачай обычные исходники вместе с примерами, пройдя по ссылке выше(в конце статьи ссылка на Lua_1Step.rar). В файле lua.pas найдёшь апишные функции, а описание их можно читать на сайте lua.org (инглиш, что поделаешь) или lua.ru (русский).

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.