char version[32]
не то же самое, что AnsiChar
, потому что этот AnsiChar является одним символом. Вам понадобится массив AnsiChar, (version: array [0..31] of AnsiChar
), точно такой же, как в коде C. Вам понадобится правильное объявление для всех членов записи.
type
dll_info_t = record
version: array [0..31] of AnsiChar;
r_type: array [0..127] of AnsiChar;
b_date: array [0..31] of AnsiChar;
c_list: array [0..31] of AnsiChar;
build: array [0..31] of AnsiChar;
end;
var
Dll_get_lib_info: Function(out info: dll_info_t): Integer; stdcall;
hMod: HMODULE;
info: dll_info_t;
begin
hMod := LoadLibrary(Dl_path);
@Dll_get_lib_info := GetProcAddress(hMod, 'Dll_get_lib_info');
if Assigned(Dll_get_lib_info) then begin
Dll_get_lib_info(info);
ShowMessage(info.version);
ShowMessage(info.release_type);
ShowMessage(info.build_date);
ShowMessage(info.change_list);
end;
end;
Правильно или нет stdcall
, зависит от определения макроса LIB_API
.