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

> вопрос по ffi и типы данных
trico
сообщение 27.3.2020, 9:25
Сообщение #1


**

Neophyte
Сообщений: 31
Регистрация: 23.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.593
Возраст: 26



Пишу плагин на делфи, с integer разобрался:
Код
local ffi = require("ffi")
local lib = ffi.load("getpix.dll")

ffi.cdef[[
   __cdecl int getpix(int h, int x, int y);
]]


а вот если у меня boolean либо string?? Ну или же своя структура. Как указать это в синтаксисе луа в пилоте?
на __cdecl bool getf(string patch); ругается "declaration specifier expected near 'string'"

нужно обмениваться с длл типами данных string, bollean, array[a,b]. как это должно выглядеть?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
Cockney
сообщение 27.3.2020, 12:12
Сообщение #2


********

Master
Сообщений: 1.404
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22597
Пользователь №: 16.156



Код

ffi.cdef[[

   //custom struct
   struct my_struct{
      int x;
      int y;
   };

   //boolean
   __cdecl bool getbool();
  
  
   //string
  __cdecl const char* getstr();

  //struct
  __cdecl const struct my_struct* getstruct();

]]
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
trico
сообщение 28.3.2020, 8:54
Сообщение #3


**

Neophyte
Сообщений: 31
Регистрация: 23.12.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.593
Возраст: 26



спасибо большое.

Если не трудно, почему не могу добиться простого ответа от плагина:

подключаю длл и функцию:
Код
local ffi = require("ffi")
local file = ffi.load("files.dll")
ffi.cdef[[
    __cdecl const char* fexists(const char* patch);
]]


функция в длл для теста:
Код
function fexists(patch:string):string; cdecl;
begin
fexists := patch;
end;


вызываю в пилоте
Код
local patch = 'abc'
local t = file.writef(patch)
log(t)

в логах пусто. Хотя если поставить в длл Cardinal а в пилоте int то данные идут в плагин и нормально возвращаются.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения



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

 

- Текстовая версия | Версия для КПК Сейчас: 18.9.2025, 5:42
Designed by Nickostyle