У меня есть скомпилированный Cll C / C ++ VS и библиотека Delphi, созданная из h-файла C / C ++. H-файл имеет макроопределенные директивы. Во все внешние вызовы C / C ++ и вызовы typedef включена директива DISPLAY_CALL.
При преобразовании в Delphi я исключил директиву DISPLAY_CALL, так как она не соответствовала моему преобразованию Delphi. Большая часть функций DLL работает отлично, за исключением определенных функций и вызовов типов, где DLL использует директиву DISPLAY_CALL, чтобы определить, это платформа Windows или нет и будет возвращать ошибку, если вызывается на другой платформе (игнорируется в DLL). Однако, если DISPLAY_CALL исключен, то на любой платформе получена ошибка, поэтому директива DISPLAY_CALL должна быть принята DLL. Компиляция C ++ с Visual Studio подтверждает эту ошибку, если исключить директиву DISPLAY_CALL.
Я использую Tokyo 10.2.3 Enterprise.
Я искал, как это сделать без успеха.
Итак, как вы включаете эту директиву DISPLAY_CALL в процесс внешнего вызова Delphi. Я столкнулся с зависимостью, но я не уверен, что это правильное направление.
Ниже приведен фрагмент кода C / C ++ и текущего переведенного кода Delphi.
C / C ++ код
#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
#define DISPLAY_CALL WINAPI
#else
#define DISPLAY_CALL
#endif
#ifdef __cplusplus
extern "C"{
#endif
typedef void (DISPLAY_CALL *display_removed_cb)(int fd, void *user_data);
int DISPLAY_CALL display_get_device(display_device_handle *dev_handle);
Delphi код
const
DisplayName = 'display.dll'; //defined for windows stdcall
type
display_removed_cb = procedure(fd:integer; user_data:pointer);
function display_get_device (dev_handle:pdisplay_device_handle): integer; stdcall; external DisplayName name 'display_get_device';
Я с нетерпением жду каких-то превосходных знаний по этому вопросу.