Обновил Лазарь до 2.2.2 - перестал собираться проект.
Модератор: Модераторы
Обновил Лазарь до 2.2.2 - перестал собираться проект.
Предыдущая версия - 2.0.6
В проекте три ехе файла, 70% модулей используются во всех трех.
Один проект не собирается с ошибкой:
Fatal: Internal error 200709272
Два других с ошибкой:
Error: Compilation raised exception internally
Простенький проект компилится.
Clean up and build не помогает.
В проекте три ехе файла, 70% модулей используются во всех трех.
Один проект не собирается с ошибкой:
Fatal: Internal error 200709272
Два других с ошибкой:
Error: Compilation raised exception internally
Простенький проект компилится.
Clean up and build не помогает.
С ихнего сайта:
Эта ошибка вызвана вызовом оператора экспорта из модуля, используемого как для библиотеки, так и для проекта приложения.
Приведённые сообщения всегда указывают на ошибки компилятора.
Какая версия FPC, ОС, разрядность? Где код, демонстрирующий ошибку? С какими параметрами он собирается?
Поиском находится только эта ошибка:
https://gitlab.com/freepascal.org/fpc/s ... sues/29778
Разработчики FPC не могут воспроизвести её в версиях 3.2.0 и выше.
Какая версия FPC, ОС, разрядность? Где код, демонстрирующий ошибку? С какими параметрами он собирается?
Поиском находится только эта ошибка:
https://gitlab.com/freepascal.org/fpc/s ... sues/29778
Разработчики FPC не могут воспроизвести её в версиях 3.2.0 и выше.
Win7 х64
Исходников очень много, выкладывать не реально.
Добавлено спустя 5 минут 34 секунды:
В первое приложение он включен и выдается Fatal: Internal error 200709272, в два других приложения он не влючен
Текст модуля:
Добавлено спустя 9 минут 30 секунд:
При этом пример
https://gitlab.com/freepascal.org/fpc/s ... sues/29778
у меня комплится!
Исходников очень много, выкладывать не реально.
Добавлено спустя 5 минут 34 секунды:
У меня есть такой модуль.Максим писал(а):Приведённые сообщения всегда указывают на ошибки компилятора.
Поиском находится только эта ошибка:
https://gitlab.com/freepascal.org/fpc/s ... sues/29778
Разработчики FPC не могут воспроизвести её в версиях 3.2.0 и выше.
В первое приложение он включен и выдается Fatal: Internal error 200709272, в два других приложения он не влючен
Текст модуля:
Код: Выделить всё
//Содержит экспортные процедуры для вызова из ДЛЛ
unit ExportProcs;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Dynlibs, Dialogs;
type
TLoadedDllRec=record
Name:string;
hnd: THandle;
end;
PLoadedDllRec=^TLoadedDllRec;
function EvallDllProc(const DLLName, ProcName:string; Zn:Pointer):boolean;
var
MasDLL:Array of TLoadedDllRec;
implementation
uses unZn, CommonFunc, unMd, unExpr;
var i:integer;
//Загружает ДЛЛ и вызывает Инициализировать
//IsFunc - вызваем процедуру или функцию
//RetVal - возвращаемое функцией длл значение
function LoadDLLAndEval(const DLLName, ProcName:string; Zn:Pointer; IsFunc:boolean; var RetVal:variant):boolean;
type
TDLL_Init=function(Zn:Pointer):pchar; stdcall;
TDLL_proc=function(Zn:Pointer):boolean; stdcall;
var
DllRec:PLoadedDllRec;
i:integer;
FullDLLName, s:string;
res:pchar;
DLL_InitProc:TDLL_Init;
DLL_proc:TDLL_proc;
begin
Result:=false;
{$IFDEF WINDOWS }
FullDLLName:=DLLName+'.dll';
{$ENDIF }
{$IFDEF LINUX }
FullDLLName:=DLLName+'.so';
{$ENDIF }
//Проверим, не загружена ли уже
DllRec:=nil;
For i:=0 to Length(MasDLL)-1 do begin
If MasDLL[i].Name=DllName Then begin
DllRec:=@MasDLL[i];
Break;
end;
end;
//Если не загружалась - загрузим
If DllRec=nil Then begin
New(DllRec);
DllRec^.hnd:=LoadLibrary(FullDLLName);
If DllRec^.hnd=0 Then begin
ShowMessage('Библиотека '+FullDLLName+' не найдена');
Dispose(DllRec);
Exit;
end;
DllRec^.Name:=DLLName;
SetLength(MasDLL, Length(MasDLL)+1);
MasDLL[Length(MasDLL)-1]:=DllRec^;
DLL_InitProc:=TDLL_Init(GetProcAddress(DllRec^.hnd, 'Init'));
//Если процедура отсутствует, то не вызываем и не ругаемся
If DLL_InitProc<>nil then begin
Try
res:=DLL_InitProc(Zn);
except
on E: Exception do res:=pchar(E.Message);
end;
If res<>'' Then begin
ShowMessage(DLLName+' - ошибка вызова процедуры Init: '+res);
//Выгрузим ДЛЛ
FreeLibrary(DllRec^.hnd);
SetLength(MasDLL, Length(MasDLL)-1);
Dispose(DllRec);//Если раскоментировать перестает в ДЛЛ находить P_ShowMessage
Exit;
end;
end;
end;
DLL_proc:=TDLL_proc(GetProcAddress(DllRec^.hnd, ProcName));
If DLL_proc=nil then begin
ShowMessage('У библиотеки '+FullDLLName+' не найдена процедура '+ProcName);
Exit;
end;
Try
Result:=DLL_proc(Zn);
except
on E: Exception do ShowMessage('Error eval '+FullDLLName+'.'+ProcName+' :'+E.Message);
end;
end;
function EvallDllProc(const DLLName, ProcName:string; Zn:Pointer):boolean;
var RetVal:variant;
begin
Result:=LoadDLLAndEval(DLLName, ProcName, Zn, false, RetVal);
end;
//Функции для каллбек вызова из DLL
procedure P_ShowMessage(Mes:pchar); stdcall;
begin
ShowMessage(Mes);
end;
//Очищает память
procedure P_Dispose_PChar(s:pchar); stdcall;
begin
StrDispose(s);
end;
//Возвращает значение реквизита Zn типа "Строка"
function Zn_GetAttrib_str(Zn:TZn; NameRecv:pchar):pchar; stdcall;
var s:string;
begin
try
s:=Zn.GetAttrib(NameRecv);
Result:=StringToPChar(s);
except
on E: Exception do ShowMessage('ERROR: Zn_GetAttrib_str ('+NameRecv+') '+E.Message);
end;
end;
//Возвращает значение реквизита Zn типа "Целый"
function Zn_GetAttrib_int(Zn:TZn; NameRecv:pchar):integer; stdcall;
var s:string;
begin
try
Result:=Zn.GetAttrib(NameRecv);
except
on E: Exception do ShowMessage('ERROR: Zn_GetAttrib_int ('+NameRecv+') '+E.Message);
end;
end;
//Возвращает значение реквизита Zn типа Extended
function Zn_GetAttrib_Extended(Zn:TZn; NameRecv:pchar):Extended; stdcall;
begin
try
Result:=Zn.GetAttrib(NameRecv);
except
on E: Exception do ShowMessage('ERROR: Zn_GetAttrib_Extended ('+NameRecv+') '+E.Message);
end;
end;
//Возвращает количество строк
function Zn_StringCount(Zn:TZn):integer; stdcall;
begin
Result:=Zn.StringCount;
end;
//Устанавливает текущую строку в документе
procedure Zn_SetStringNum(Zn:TZn; NewStringNum:integer); stdcall;
begin
Zn.StringNum:=NewStringNum;
end;
//Возвращает значение реквизита строки Zn типа "Строка"
function Zn_GetRowAttrib_str(Zn:TZn; NumStr:integer; NameRecv:pchar):pchar; stdcall;
var s:string;
begin
try
s:=Zn.GetTblRecv(NumStr, NameRecv);
Result:=StringToPChar(s);
except
on E: Exception do ShowMessage('ERROR: Zn_GetRowAttrib_str ('+NameRecv+') '+E.Message);
end;
end;
//Возвращает значение реквизита строки Zn типа Extended
function Zn_GetRowAttrib_Extended(Zn:TZn; NumStr:integer; NameRecv:pchar):Extended; stdcall;
begin
try
Result:=Zn.GetTblRecv(NumStr, NameRecv);
except
on E: Exception do ShowMessage('ERROR: Zn_GetRowAttrib_Extended ('+NameRecv+') '+E.Message);
end;
end;
Function Zn_GetAttribWithPoint_str(Zn:TZn; const AtrName:pchar):pchar; stdcall;
var
RecVal:TRecValue;
begin
try
RecVal:=GetAttribWithPoint(Zn, AtrName, md.WorkDate);
Result:=StringToPChar(RecVal.Value);
except
on E: Exception do ShowMessage('ERROR: Zn_GetAttribWithPoint_str ('+AtrName+') '+E.Message);
end;
end;
exports P_ShowMessage;
exports P_Dispose_PChar;
exports Zn_GetAttrib_str;
exports Zn_GetAttrib_int;
exports Zn_GetAttrib_Extended;
exports Zn_StringCount;
exports Zn_SetStringNum;
exports Zn_GetRowAttrib_str;
exports Zn_GetRowAttrib_Extended;
exports Zn_GetAttribWithPoint_str;
//}
finalization
//Выгрузим все ДЛЛ
try
For i:=0 to Length(MasDLL)-1 do FreeLibrary(MasDLL[i].hnd);
except end;
end.
При этом пример
https://gitlab.com/freepascal.org/fpc/s ... sues/29778
у меня комплится!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
руками попробуй стереть все ppu проекта, включая пакеты если используются
Не помогло.zub писал(а):руками попробуй стереть все ppu проекта, включая пакеты если используются
Компоненты чистил в C:\lazarus\components\custom\
Компоненты инсталлируютя, Лазарь пересобирается.
Удалось воспроизвести оба сообщения об ошибке, спасибо за код. Получившиеся два примера добавлены в багтрекер по ссылке выше.
В дальнейшем, пожалуйста, старайтесь выкладывать компилирующийся код, чтобы не приходилось тратить время на его адаптацию.
В дальнейшем, пожалуйста, старайтесь выкладывать компилирующийся код, чтобы не приходилось тратить время на его адаптацию.
Максим
"exports" виноват?
"exports" виноват?
Сложно сказать. Первый пример успешно собирается, если раскомментировать объявление функции в интерфейсной части модуля. Второй пример, насколько я помню, начинал успешно собираться, если убрать из него пару функций (вместе с их exports).
Виноват exports
Убрал модуль ExportProcs из проекта - компиляция прошла успешно.
Спасибо всем откликнувшимся.
На версии lazarus-2.0.6-fpc-3.0.4-win32 все работало.
Отвечаю не часто - это не основная работа, работаю периодически по вечерам, извините за паузы в сообщениях.
Убрал модуль ExportProcs из проекта - компиляция прошла успешно.
Спасибо всем откликнувшимся.
На версии lazarus-2.0.6-fpc-3.0.4-win32 все работало.
Отвечаю не часто - это не основная работа, работаю периодически по вечерам, извините за паузы в сообщениях.
Или то, что эти функции не были объявлены в интерфейсной части модуля.tria писал(а):Виноват exports
Или, непонятным образом, их "неправильное" количество в модуле.
Или фаза луны.
Это ошибка в компиляторе, поэтому чудеса возможны.
{$mode objfpc} попробуй {$mode delphi}
Не помогло...MaratIsk писал(а):{$mode objfpc} попробуй {$mode delphi}
В 2.0.12 эта ошибка уже есть. В 2.0.6 - нет
-
GreyCrazyWolf
- новенький
- Сообщения: 12
- Зарегистрирован: 02.03.2023 14:23:57
Добрейшего времени суток!
Аналогичная проблема, небольшой проект два модуля, импортировал с дельфи, сами модули вроде как компилятся потом выскакивает
Fatal: Internal error 200709272
Аналогичная проблема, небольшой проект два модуля, импортировал с дельфи, сами модули вроде как компилятся потом выскакивает
Fatal: Internal error 200709272
Код: Выделить всё
Lazarus 2.2.4 (rev lazarus_2_2_4) FPC 3.2.2 x86_64-win64-win32/win64
C:\lazarus\fpc\3.2.2\bin\x86_64-win64\fpc.exe
-MDelphi
-Sh
-WR
-O1
-g
-gl
-l
-vewnhibq
-Filib\x86_64-win64
-Fu.
-FuC:\Users\username\AppData\Local\lazarus\onlinepackagemanager\packages\Indy10\lib\x86_64-win64
-FuC:\lazarus\components\ideintf\units\x86_64-win64\win32
-FuC:\lazarus\components\lazcontrols\lib\x86_64-win64\win32
-FuC:\lazarus\lcl\units\x86_64-win64\win32
-FuC:\lazarus\lcl\units\x86_64-win64
-FuC:\lazarus\components\freetype\lib\x86_64-win64
-FuC:\lazarus\components\buildintf\units\x86_64-win64
-FuC:\lazarus\components\lazutils\lib\x86_64-win64
-FuC:\lazarus\packager\units\x86_64-win64
-FUlib\x86_64-win64
-FE.
-oproject1.dll
-dLCL
-dLCLwin32
