Есть библиотека sciter, я хочу ее использовать в Delphi, но имеющиеся там *привязки*(bindings) ориентированы на Delphi 7 (но это не самое главное, они рассчитаны на версию библиотеки 3.x, в то время, как библиотека уже давно 4.4.x, собственно там много чего нет).
Но у библиотеки есть C PLAIN API, при помощи которого можно запросто подружить ее с Delphi, чем я собственно и занимаюсь, но возникла проблема..
Есть основная функция, которая возвращает структуру с кучей других функций (ISciterAPI), она в принципе работает, некоторые функции я пробовал из нее вызывать и они работали отлично, но работают лишь несколько первых функций нормально, остальные же сыплются на Access Violation, хотя на других языках это работает нормально.
Структура выглядит таким образом, потом при помощи другой функции возвращается указатель на эту структуру ISciterAPI* (В самой структуре функций намного больше).
type
PSciterAPI = ^ISciterAPI;
ISciterAPI = packed record
version: UINT;
SciterClassName: function(): LPCWSTR; // LPCWSTR - PWideChar;
SciterVersion: function(major: Integer): UINT; // Использовал до этого BOOL, но наткнулся на статью, где рассказывалось о том, что он немного странно работает, мол BOOL false = 0, а BOOL true = -1; Поэтому напрмиер функция SciterVersion у меня не работала правильно, но при использовании Integer все стало нормально работать.
end;
Но, как я уже сказал ранее - только некоторые функции работают, остальные падают с исключением ACCESS VIOLATION.
Почему так может быть?
P.S: Единственный пока рабочий для меня вариант - написание отдельной библиотеки, которая выносит все эти функции в экспорт, соответственно их теперь можно вызывать непосредственно из самой библиотеки, минуя ISciterAPI, но минусы такого подхода в том, что эта библиотека по сути является посредником между программой на Delphi и Sciter...
Изменено пользователем Дмитрий Потапов немного подкорректировал код
Вопрос
Dmitry_4501
Всем доброго времени суток, имеется проблема...
Есть библиотека sciter, я хочу ее использовать в Delphi, но имеющиеся там *привязки*(bindings) ориентированы на Delphi 7 (но это не самое главное, они рассчитаны на версию библиотеки 3.x, в то время, как библиотека уже давно 4.4.x, собственно там много чего нет).
Но у библиотеки есть C PLAIN API, при помощи которого можно запросто подружить ее с Delphi, чем я собственно и занимаюсь, но возникла проблема..
Есть основная функция, которая возвращает структуру с кучей других функций (ISciterAPI), она в принципе работает, некоторые функции я пробовал из нее вызывать и они работали отлично, но работают лишь несколько первых функций нормально, остальные же сыплются на Access Violation, хотя на других языках это работает нормально.
Структура выглядит таким образом, потом при помощи другой функции возвращается указатель на эту структуру ISciterAPI* (В самой структуре функций намного больше).
typedef struct ISciterAPI { UINT version; LPCWSTR SciterClassName(void); UINT SciterVersion(BOOL major); }; typedef ISciterAPI* LPSciterAPI;
В Delphi я все оформляю так:
type PSciterAPI = ^ISciterAPI; ISciterAPI = packed record version: UINT; SciterClassName: function(): LPCWSTR; // LPCWSTR - PWideChar; SciterVersion: function(major: Integer): UINT; // Использовал до этого BOOL, но наткнулся на статью, где рассказывалось о том, что он немного странно работает, мол BOOL false = 0, а BOOL true = -1; Поэтому напрмиер функция SciterVersion у меня не работала правильно, но при использовании Integer все стало нормально работать. end;
Но, как я уже сказал ранее - только некоторые функции работают, остальные падают с исключением ACCESS VIOLATION.
Почему так может быть?
P.S: Единственный пока рабочий для меня вариант - написание отдельной библиотеки, которая выносит все эти функции в экспорт, соответственно их теперь можно вызывать непосредственно из самой библиотеки, минуя ISciterAPI, но минусы такого подхода в том, что эта библиотека по сути является посредником между программой на Delphi и Sciter...
Изменено пользователем Дмитрий Потаповнемного подкорректировал код
6 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.