Я пытаюсь преобразовать API SendAnywhere header file из кода C в Delphi 10 для Windows.Преобразование функций C в Delphi 10 Seattle
Использование presented table of Embarcadero Я успешно преобразовать некоторые из функций:
typedef void* PaprikaTask;
typedef void* PaprikaAuthToken;
__declspec(dllexport) void paprika_set_apikey(const char* key);
__declspec(dllexport) PaprikaAuthToken paprika_auth_create();
__declspec(dllexport) PaprikaAuthToken paprika_auth_create_with_deviceid(const char* id, const char* password);
__declspec(dllexport) void paprika_auth_close(PaprikaAuthToken auth);
__declspec(dllexport) bool paprika_is_running(PaprikaTask task);
__declspec(dllexport) PaprikaTask paprika_create_download(const wchar_t* key, const wchar_t* destDirPath);
__declspec(dllexport) void paprika_start(PaprikaTask task);
Это мое преобразование:
Пример из SendAnywhere использует эти функции следующим образом:
PaprikaTask pTask;
PaprikaAuthToken gToken;
paprika_set_apikey("YOUR_API_KEY");
gToken = paprika_auth_create();
pTask = paprika_create_download(L"KEY", L"/tmp");
paprika_set_auth(pTask, gToken);
paprika_start(pTask);
Этот как я интерпретировал правильный код:
var
FAuthToken: PaprikaAuthToken;
FOption: PaprikaOption;
paprika_set_apikey(PChar('my_correct_api_key'));
FAuthToken = paprika_auth_create();
// backslash for windows
FTask := paprika_create_download(PWideChar('correct_key'), PWideChar('\tmp')); //directory exists
paprika_set_auth(FTask, FAuthToken);
paprika_start(FTask);
Я проверил работу задачи по функции paprika_is_running. Он возвращает FALSE перед вызовом paprika_start_function. Он начинает возвращать TRUE после звонка paprika_start_function, но через 1-2 секунды (независимо от размера передаваемого файла) он возвращает FALSE. Это означает, что функция работает, но, похоже, проблема в аргументах.
Пожалуйста, скажите мне, где я иду не так?
Может быть, есть некорректное преобразование из строки в TWideChar. Или путь к каталогу передается некорректно, например, и используется некорректная косая черта. Я пробовал разные пути:
('C: /', 'C: \', 'C:', 'file: // C:', 'file: // C: /', '/ ',' \ ',' ')
Что именно? Помоги пожалуйста. Мне нужна твоя помощь.
FWIW, я рекомендую прочитать мою статью о таких преобразованиях, [Pitfalls of Converting] (http://rvelthuis.de/articles/articles-convert.html). Он обрабатывает эти вещи в глубину. –
Спасибо! Удивительная статья! Есть много полезных вещей. Почему Google Search не нашел его раньше ... –