Вверх ↑
Ответов: 2059
Рейтинг: 132
#1: 2013-11-08 11:15:35 ЛС | профиль | цитата
Я не могу смоделировать ситуацию, чтобы не работало.
У меня стоит XP, может в этом дело?
Надо попробовать так:
http://forum.hiasm.com/forum_serv.php?q=56&id=3628
1. Если не работают оба, то надо думать.
2. Если работают оба, то надо обновить компонент.
3. Если работает MorfProject4.exe, то надо заменить код компонента hiMorphology.pas

unit hiMorphology;

interface

uses Kol,Share,Debug;

type
THIMorphology = class(TDebug)
private
// FIndex:integer;
// FString:string;
public
//da_word : array of integer;
_prop_Path:String;
_data_Path:THI_Event;
_prop_Language:Integer;
_data_Language: THI_Event;
_data_Str: THI_Event;
_data_NumOffer: THI_Event;
_data_NumWord: THI_Event;
_data_NumSyntax: THI_Event;
_data_Mode: THI_Event;
_data_GetConnect: THI_Event;
_data_IConnect: THI_Event;
_event_onParse:THI_Event;
_event_onTranslate:THI_Event;
_event_onNumWord:THI_Event;
_event_onNumSyntax:THI_Event;
_event_onNumWordConnect:THI_Event;
Procedure _work_doSetLanguage(var _Data:TData; Index:Word);
Procedure _work_doSetText(var _Data:TData; Index:Word);
Procedure _work_doTranslate(var _Data:TData; Index:Word);
Procedure _work_doNumOffer(var _Data:TData; Index:Word);
Procedure _work_doNumWord(var _Data:TData; Index:Word);
Procedure _work_doNumSyntax(var _Data:TData; Index:Word);
Procedure _work_doClose(var _Data:TData; Index:Word);
Procedure _work_doGetConnect(var _Data:TData; Index:Word);
Procedure _work_doIConnect(var _Data:TData; Index:Word);
procedure _var_Count_offers(var _Data:TData; Index:word);
procedure _var_Count_Words(var _Data:TData; Index:word);
procedure _var_Count_syntax(var _Data:TData; Index:word);
procedure _var_Text_offer(var _Data:TData; Index:word);
procedure _var_Count_Connect(var _Data:TData; Index:word);
procedure _var_Connchr(var _Data:TData; Index:word);
end;

// procedure SetParam()stdcall; external 'dwf.dll' name 'wrfSetParam';
function Open(Path,Lan:String):Integer;CDECL; external 'dwf.dll' name 'wrfOpen';
function Parses(HEEPMORF:Integer;Str:String):Integer;CDECL; external 'dwf.dll' name 'wrfParse';
procedure Translate(HEEPMORF:Integer) CDECL; external 'dwf.dll' name 'wrfTranslate';
function GetSentence(HEEPMORF:Integer):Integer;CDECL; external 'dwf.dll' name 'wrfGetSentence';
function Close(HEEPMORF:Integer):Integer;CDECL; external 'dwf.dll' name 'wrfClose';
var da_word : array of integer;
implementation

var
Path,Lan,Str:String;
temstring:Pchar;
GetConnect,IConnchr,IConn,i,sumconn,Synt,words,offer,Pars,HEEPMORF,result,Language:Integer;
da_offer : array of integer;
// da_word : array of integer;
da_syntax : array of integer;
a_Connect : array[0..50] of integer;
a_Connchr : array[0..50] of char;
procedure THIMorphology._work_doSetLanguage;
begin
result:= ReadInteger(_Data,_data_Language,_prop_Language);
Path:= ReadString(_Data,_data_Path,_prop_Path);
if result=0 then Lan:='re' else Lan:='er' ;
HEEPMORF:=Open(Path,Lan);
end;

procedure THIMorphology._work_doSetText;
var
Parss,Pars2,ind,offeri:Integer;
begin
Str:= ReadString(_Data,_data_Str);
Parss:=Parses(HEEPMORF,Str);
Pars:= GetSentence(HEEPMORF);
Pars2:=Pars; offeri:= 0;
while Pars2<>0 do
begin
inc(offeri);
Pars2:=Integer(Pointer(Pars2)^);
end;
offer:=offeri - 1;
SetLength(da_offer,offeri);
Pars2:=Pars; ind:=0;
while Pars2<>0 do
begin
da_offer[ind] := Pars2;
Pars2:=Integer(Pointer(Pars2)^);
inc(ind);
end;
_hi_CreateEvent(_Data,@_event_onParse,Parss);
end;

procedure THIMorphology._work_doTranslate;
var
s:string;
Pars2:Integer;
begin
Translate(HEEPMORF);
Pars2:=Pars;
while Pars2<>0 do
begin
temstring:= Pchar(Pointer(Pars2 + 16)^) ;
Pars2:=Integer(Pointer(Pars2)^);
s:=s+temstring;
end;
_hi_CreateEvent(_Data,@_event_onTranslate,s);
s:= Pchar(nil);
end;
procedure THIMorphology._var_Count_offers;
begin
_Data.Data_type := data_int;
_Data.idata := offer;
end;
procedure THIMorphology._work_doNumOffer;
var
s:string;
nOffer,Pars2,wordsi,Synti,ind:Integer;

begin
wordsi:=0; Synti:=0;
nOffer:=ReadInteger(_Data,_data_NumOffer);
Pars2:=Integer(Pointer(da_offer[nOffer]+4)^);
while Pars2<>0 do
begin
Pars2:=Integer(Pointer(Pars2)^);
inc(wordsi);
end;
words:=wordsi- 1;
SetLength(da_word,wordsi);
nOffer:=ReadInteger(_Data,_data_NumOffer);
Pars2:=Integer(Pointer(da_offer[nOffer]+4)^);
ind:=0;
while Pars2<>0 do
begin
da_word[ind] := Pars2;
Pars2:=Integer(Pointer(Pars2)^);
inc(ind);
end;
nOffer:=ReadInteger(_Data,_data_NumOffer);
Pars2:=Integer(Pointer(da_offer[nOffer]+12)^);
while Pars2<>0 do
begin
Pars2:=Integer(Pointer(Pars2)^);
inc(Synti);
end;
Synt:=Synti - 1;
SetLength(da_syntax,Synti);
nOffer:=ReadInteger(_Data,_data_NumOffer);
Pars2:=Integer(Pointer(da_offer[nOffer]+12)^);
ind:=Synt;
while Pars2<>0 do
begin
da_syntax[ind] := Pars2;
Pars2:=Integer(Pointer(Pars2)^);
dec(ind);
end;
end;

procedure THIMorphology._var_Count_Words;
begin
_Data.Data_type := data_int;
_Data.idata := words;
end;

procedure THIMorphology._var_Count_syntax;
begin
_Data.Data_type := data_int;
_Data.idata := Synt;
end;
procedure THIMorphology._var_Text_offer;
var
s:string;
nOffer,Pars2:Integer;
begin
nOffer:=ReadInteger(_Data,_data_NumOffer);
Pars2:=da_offer[nOffer];
s:=Pchar(Pointer(Pars2 + 16)^);
//s:=Pchar(Pointer(da_offer[ReadInteger(_Data,_data_NumOffer)]+16)^);
_Data.Data_type := data_str;
_Data.sdata := s;
end;

procedure THIMorphology._work_doNumWord;
var
s:string;
indm,ind:Integer;
begin
ind:=ReadInteger(_Data,_data_NumWord);
case ReadInteger(_Data,_data_Mode) of
0: s:=Pchar(Pointer(da_word[ind]+8)^);
1: s:=Pchar(Pointer(da_word[ind]+12)^);
else indm:=Integer(Pointer(da_word[ind]+16)^);
s:=Pchar(nil);
while indm<>0 do
begin
s:=s+int2str(Integer(Pointer(indm + 4)^));
indm:=Integer(Pointer(indm)^);
if indm<>0 then s:=s + ' ' ;
end;
end;
_hi_CreateEvent(_Data,@_event_onNumWord,s);
end;

procedure THIMorphology._work_doNumSyntax;
var
s:string;
ind:char;
nSyntax,noun,Pars2:Integer;
begin
nSyntax:=ReadInteger(_Data,_data_NumSyntax);
Pars2:=da_syntax[nSyntax];
ind:=char(Pointer(Pars2 + 12)^);
noun:= Integer(Pointer(Pars2 + 13)^);
if Integer(Pointer(Pointer(Pars2 + 13)^)^) = 0 then s:=s + ind
else
begin
s:=Pchar(Pointer(noun + 8)^);s:=s+ ' ' + ind + ' ';
s:=s + Pchar(Pointer(Integer(Pointer(Integer(Pointer(Pars2 + 13)) + 4)^) + 8)^)+ ' ';
s:=s + Pchar(Pointer(Pars2 + 4)^)+ ' '; s:=s + Pchar(Pointer(Pars2 + 8)^) ;
end;
_hi_CreateEvent(_Data,@_event_onNumSyntax,s);
end;
procedure THIMorphology._work_doClose;
var
sc:Integer;
begin
sc:=Close(HEEPMORF);
end;

procedure THIMorphology._work_doGetConnect;
var
ic:char;
nConnect,icon,noun,Pars2,ii,sumconni,indw:Integer;
begin
nConnect:=ReadInteger(_Data,_data_GetConnect);
indw:=da_word[nConnect];
sumconni:=0;
for i:=0 to Length(da_syntax) -1 do
begin
Pars2:=da_syntax[i];
noun:= Integer(Pointer(Pars2 + 13)^);
if Integer(Pointer(Pointer(Pars2 + 13)^)^) <>0 then

if indw=Integer(Pointer(Integer(Pointer(Pars2 + 13)) + 4)^)then
begin
ii:=0;
icon:=noun; a_Connchr[sumconni]:=char(Pointer(Pars2 + 12)^);
while icon<>da_word[ii] do inc(ii);
a_Connect[sumconni]:= ii; inc(sumconni);
end;
if indw=noun then
begin
ii:=0;
icon:=Integer(Pointer(Integer(Pointer(Pars2 + 13)) + 4)^);
ic:=char(Pointer(Pars2 + 12)^);
if ic='<' then a_Connchr[sumconni]:='>' else if ic='>' then a_Connchr[sumconni]:='<' else a_Connchr[sumconni]:=char(Pointer(Pars2 + 12)^) ;
while icon<>da_word[ii] do inc(ii);
a_Connect[sumconni]:= ii;inc(sumconni);
end;
sumconn:=sumconni-1;
end
end;
procedure THIMorphology._var_Count_Connect;
begin
_Data.Data_type := data_int;
_Data.idata := sumconn;
end;
procedure THIMorphology._work_doIConnect;
begin
IConnchr:=ReadInteger(_Data,_data_IConnect);
IConn:=a_Connect[IConnchr];
_hi_CreateEvent(_Data,@_event_onNumWordConnect,IConn);
end;
procedure THIMorphology._var_Connchr;
var
s:string;
//icon:Integer;
begin
s:=a_Connchr[IConnchr];
_Data.Data_type := data_str;
_Data.sdata:=s;


end;
end.
карма: 6

0
файлы: 1code_32274.txt [7.9KB] [985]