sts писал(а):а реально в libapr-1.dll есть только '_apr_hash_this@16'
'apr_hash_this' вообще нету в дллках
Это не Subversion, это
APR...
_apr_hash_this@16 - это декорированный вариант apr_hash_this
Похоже в винде вместо cdecl нужно указывать stdcall
Т.е.
- Код: Выделить всё
procedure apr_hash_this(hi: apr_hash_index_p; out key: pointer; out klen: apr_ssize_t; out val: pointer); stdcall;
external libapr name 'apr_hash_this';
Попробуй в модулях apr из mxlib заменить все вхождения cdecl на stdcall
Добавлено спустя 6 минут 26 секунд:sts писал(а):А где можно почитать доку на этот СВН АПИ?
Я изучал заголовки из исходников Subversion и собственно исходники. Простые примеры можешь посмотреть в mxlib, да и среди исходников subversion тоже было несколько примеров. Можешь ещё глянуть там же на Шаманграде mxcmd - там пример того, как выводить окошки с запросом логина/пароля когда требуется авторизация.
sts писал(а):коекак библиотека завелась
Поделись опытом, я подкорректирую mxlib, чтобы меньше мучались
Добавлено спустя 19 минут 52 секунды:sts писал(а):теперь стоит вопрос а что собствено надо вызвать и в каком порядке чтоб получить список измененных файлов по номеру ревизии
1. иницаилизация контекста (см. примеры)
2. получение данных, в твоем случае нужно использовать функцию svn_client_log*, я думаю пока стоит ориентироваться на svn_client_log3 (subversion 1.4) - её будет достаточно.
3. финализация (см. примеры)
Практически все функции используют функции обратного вызова, которые принимает информацию через аргументы и svn_client_log* одна из них.
Например, для svn_client_status*
- Код: Выделить всё
/**
* Функция обратного вызова для svn_client_status2() для метода svn::status(), который узнает статус файла в рабочей копии
*/
// Статитческий метод! В Pascal нет нормальной поддержки статических методов,
// потому нужно будет делать имено функцию.
void svn::status_func2(void *baton, const char *, svn_wc_status2_t *status)
{
svn *self = static_cast<svn *>(baton); // это указатель на класс-обретку
// структура status описывает статус файла
if ( status->text_status == svn_wc_status_normal && status->prop_status != svn_wc_status_normal )
{
// записываем статус в поле объекта нашей обертки
self->fStatus = svn_wc_status_modified;
}
else
{
self->fStatus = status->text_status;
}
}
И собственно реализация svn::status();
- Код: Выделить всё
/**
* Вернуть статус файла
* @param path путь к файлу/каталогу
* @return статус файла/каталога
*/
svn_wc_status_kind svn::status(const QString &path)
{
// в fStatus будет записан статус файла, none - типа нет файла
fStatus = svn_wc_status_none;
// собственно вызов svn_client_status
svn_client_status2(NULL, path.toUtf8().data(), NULL, svn::status_func2, this, FALSE, TRUE, FALSE, TRUE, FALSE, ctx, pool);
// в fStatus был записан статус файла, мы его и вернем
return fStatus;
}
В твоем случае я тоже посоветовал бы сделать класс (или объект) обёртку