كيفية حل دلفي [باسكال خطأ فادح] F2084 خطأ داخلي:LA33?

StackOverflow https://stackoverflow.com/questions/153388

  •  03-07-2019
  •  | 
  •  

سؤال

لقد سئمت حقا من هذه المشكلة.عمليات البحث جوجل دائما يبدو أنها تشير إلى أن "حذف جميع bpls عن حزمة", "حذف جميع dcus".هذا في بعض الأحيان فقط-لا-لا-العمل.أتمنى أن تحصل على بعض الأفكار الأخرى هنا.

لدي مجموعة كتب في المنزل التي تم تثبيتها من دون مسألة بضعة أشهر.وبعد إجراء بعض التغييرات على المصدر ، أعتقد أنه حان الوقت إلى إعادة ترجمة/إعادة تثبيت الحزمة.الآن أحصل على أخطاء أول إذا قمت باختيار "تثبيت" هو

انتهاك وصول في عنوان 02422108 في وحدة 'dcc100.dll'.قراءة العنوان 00000000.

أو إذا كنت تحاول بناء/تجميع حزمة ، أحصل على

[باسكال خطأ فادح] F2084 خطأ داخلي:LA33

هذا هو واحد من تلك دلفي المشاكل التي يبدو أن تحدث مرة بالنسبة للكثيرين منا.سيكون رائعا لو تمكنا من جمع ردا شيئا على غرار "أي واحد أو مزيج من هذه الخطوات قد إصلاحه ، ولكن إذا كنت تفعل كل هذه الخطوات سوف إصلاحه...."

في هذه اللحظة, لقد إزالة جميع الإشارات إلى bpl/dcp ملفات هذه الحزمة ولكن لا يزال الحصول على نفس الخطأ...

باستخدام BDS2006 (دلفي)

تحديث 01-Oct-2008:تمكنت من حل هذا - انظر موقعي أدناه.وأنا لا يمكن أن تقبل بلدي الجواب, أنا لست متأكدا تماما ما يجب القيام به هنا.ومن الواضح أن هذه الأنواع من القضايا تحدث في كثير من الأحيان على بعض الناس ، لذا سأترك الموضوع مفتوح لفترة من الوقت للحصول على اقتراحات أخرى.ثم أعتقد أنه إذا كان هناك شخص يقوم بجمع كل المعلومات إلى سوبر بوست ، أنا لا يمكن أن يقبل الجواب

هل كانت مفيدة؟

المحلول

تمكنت من حل هذا في أعقاب الإجراء أدناه

  1. إنشاء حزمة جديدة
  2. واحدا تلو الآخر ، إضافة مكونات الحزمة تجميع وتركيب ، حتى أنه فشل.
  3. التحقيق في الوحدة تسبب الفشل.

كما اتضح الوحدة المعنية فئة ثابت الصفيف, على سبيل المثال

TMyClass = class(TComponent)
private
  const ErrStrs: array[TErrEnum] of string
    = ('', //erOK
       'Invalid user name or password', //erInvUserPass
       'Trial Period has Expired'); //erTrialExp
protected
  ...
public
  ...
end;

لذلك يبدو أن دلفي لا يحب الدرجة الثوابت (أو ربما الدرجة المستمر المصفوفات) في مكونات حزمة

تحديث:و نعم, تم الإبلاغ عن هذا codegear

نصائح أخرى

هذه هي الخلل في برنامج التحويل البرمجي/رابط.يمكنك أن تجد العديد من المراجع من هذه الحشرات على الإنترنت في مختلف إصدارات دلفي ، ولكنها ليست دائما نفس الأخطاء.الذي يجعل من الصعب إعطاء حل واحد لجميع هذه أنواع مختلفة من المشاكل.

العامة الحلول التي يمكن إصلاحه ، كما لاحظت:

  • إزالة *.dcp *.dcpil *.dcu *.dcuil *.bpl *.dll
  • كتابة التعليمات البرمجية الخاصة بك في طريقة أخرى
  • العبث مع خيارات برنامج التحويل البرمجي
  • الحصول على أحدث نسخة دلفي

أنا شخصيا وجدت واحدة من هذه الأخطاء حلها إذا التفت خارج نطاق التدقيق.والبعض الآخر حلها إذا كنت لا تستخدم الأدوية من وحدة أخرى.واحدة تم حلها إذا كان اسم الوحدة واسم الفئة تم تغيير اسمها إلى أن تكون أصغر حجما.

و بالطبع يجب الإبلاغ عن أي مشكلة لديك على http://qc.codegear.com

ربما الخطوة التالية سوف يكون أفضل حل:
تعلن مجموعة كنوع فقط تحديد فئة المستمر مع هذا النوع, على سبيل المثال.

TMyArray = array[TErrEnum] of string;

TMyClass = class(TComponent)
private
  const ErrStrs: TMyArray
    = ('', //erOK
       'Invalid user name or password', //erInvUserPass
       'Trial Period has Expired'); //erTrialExp
protected
  ...
public
  ...
end;

وهذا يجعل مجموعة إعلان صريح.

أهدرت عدة ساعات بشأن هذه المسألة ، حذف dcu ، إلخ دون جدوى.

أخيرا ، ما عملت بالنسبة لي كان لإلغاء تجاوز التدقيق في خيارات برنامج التحويل البرمجي إعادة بناء المشروع إعادة فحص تجاوز التدقيق ، وإعادة بنائها مرة أخرى.فويلا!المشكلة قد ذهب بعيدا.يذهب الرقم.(لا تزال تستخدم D7).

لدي قضية مماثلة ، حيث كان الحل لإزالة ملف urlmon.dcu من /lib/debug.

كما عملت على إيقاف "استخدام التصحيح .dcus" تماما.هذا بالطبع غير مرغوب فيه ، ولكن يمكنك استخدامه للتحقق من ما إذا كانت المشكلة تكمن مع أي من وحدات خاصة بك ، أو مع أي من دلفي الوحدات.

حاول تنظيف "دليل الإخراج" حتى دلفي لا بأس القذرة .DCUs وأنه اضطر إلى bould على .PAS.في بعض الأحيان هذا يساعد.في حال كنت لا تكوين "دليل الإخراج" ، حاول حذف (أو أفضل تتحرك في مجلد النسخ الاحتياطي) كل .DCU الملفات.

Delphi XE3 تحديث 2

F2084 خطأ داخلي:URW1147

حالة 1:

المشكلة أن نوع أعلن في إجراء من فئة عامة.

procedure TMyClass<TContainerItem, TTarget>.Foo();
type
  TCacheInfo = record
    UniqueList: TStringList;
    UniqueInfo: TUniqueInfo;
  end;
var
  CacheInfo: TCacheInfo;

تتحرك نوع الإعلان أن الجزء الخاص من فئة إعلان حل هذه المسألة.

الحالة 2:

المشكلة في هذه الحالة تتعلق معلمة اختيارية:

unit A.pas;
interface
type
  TTest<T> = class
  public
    type
      TTestProc = procedure (X: T) of object;
    constructor Create(TestProc_: TTestProc = nil);
  end;
...

الداخلية تجميع حدث خطأ في أقرب وقت متغير من TTest الدرجة أعلن في وحدة أخرى:على سبيل المثال

unit B.pas:

uses A;
var
  Test: TTest<TObject>;

الحل هو جعل منشئ حجة TestProc_ غير الاختياري.

بالنسبة لي, في D2010 تعطيل الخيار برنامج التحويل البرمجي "تنبعث منها معلومات نوع وقت التشغيل" لم خدعة.

تعطيل "تشمل البعيد رموز التصحيح" من رابط خيارات إصلاح المشكلة بالنسبة لي دلفي 2007, dll المشروع

من إجابات مختلفة هذا الخطأ يتطلع إلى أن يكون عام حدث استثناء غير معالج من قبل المترجم.

مشكلتي كانت بسبب خطأ الدعوة function X(someString:String) : Boolean; التي غيرت سلسلة وعاد منطقية ، وذلك باستخدام someString := X(someString);

كما تجربتي خطأ داخلي هو أن أعيد كتب سطرا سطرا و تجميع مرة أخرى وأدركت أن بعض إذا أخر البيان لا تعمل مثل

يحدث خطأ داخلي

 if (DataType in ASet) 
    begin
 //do work
    end
    else if (DataType = B)
    begin
 //do work
    end
    else 
    begin
 //do work
    end;

كيف حلها :

if (DataType = B)
        begin
     //do work
        end
        else if (DataType in ASet) 
        begin
     //do work
        end
        else 
        begin
     //do work
        end;

فقط بدلت الشروط سبيل المثال.آمل أن يساعد.

لقد شهدت سلوك مماثل ، مما أدى إلى خطأ داخلي LA30.سبب المضافة حديثا ثوابت السلسلة.بعد تغيير من const cLogFileName : string = 'logfilename.log';

إلى const cLogFileName = 'logfilename.log';

(و بالطبع إعادة تشغيل دلفي IDE) كان خطأ لا تظهر بعد الآن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top