RCO MO: ошибка при использовании функций для лингвистического ПО
Из Delphi 7 пытаемся использовать указанные функции.
MoInitializeA отрабатывает без ошибок. За тем выполняем
var hInfo: Pointer; begin
hInfo := MoAllocInfo();
if ( hInfo = nil ) then ...ОШИБКА...;
MoFreeInfo( hInfo ); end;
На MoFreeInfo вываливается ошибка Access violation at address 10003F52 in module 'gpmorph.dll'. Read of address 00000004
При этом программа выдает отдельно еще одно сообщение об ошибке: Access violation at address 00000000. Read of address 00000000
Если пробовать работать с функциями "ИПС", все работает.
Вопрос: Что сделано не так?
Возможно вместо void* надо использовать не Pointer ?
А вообще не лишним было бы за такие деньги хеадер и для Delphi в поставке предусмотреть.
Плешко Владимир
26.09.05, 12:55
re: RCO MO: ошибка при использовании функций для лингвистического ПО
Убедитесь, что в созданном вами заголовке для deplhi у всех функций стоит модификатор stdcall.
Убедитесь также, что hInfo, получаемый в результате вызова MOAllocInfo, представляет собой реальный адрес в оперативной памяти. Если это не так - проблема в объявлении прототипов функций.
void* не обязательно объявлять как Pointer. Можно также как и 4-байтовое целое.
По поводу заголовков на объектном паскале - этот код работает не только на платформе win32, а еще на ряде unix-платформ. Предоставление C-интерфейсов при этом является общепринятой практикой.
Если вам не удастся решить проблемы - создайте и пришлите нам компилируемое консольное приложение на deplhi, которое вызывает функции морфоанализатора и падает. Поможем.