BUG: فئة GlobalMultiUse غير إنهاء في بيئة متعددة مؤشرات الترابط

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

اضغط هنا لرابط المقالة باللغة الانجليزية300850
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الأعراض
عند إجراء استدعاء العملاء جهازي من EXE ActiveX باستدعاء مكون في نفس الوقت ثم هذا الإجراء إجراء آخر الفئة MultiUse في مكتبة ارتباط حيوي (DLL) ، إذا كان إجراء في فئة GlobalMultiUse في آخر DLL ActiveX EXE ActiveX يبقى مكون بالوصول إلى هذه الفئة الخاصة بـ "ActiveX في الذاكرة; تفشل العملية إنهاء, حتى بعد كافة المراجع إلى أنه تم إصدارها.

لا يحدث هذا السلوك في Visual Basic 6.0 المزود بحزمة الخدمة Service Pack 3 (SP3) أو إصدار سابق.
السبب
تحدث هذه المشكلة بسبب إرجاع وظيفة DllCanUnloadNow DLL GlobalMultiUse FALSE إذا كان يتم استدعاء حالياً من قبل مؤشر ترابط آخر. وهذا يعني أن DLL GlobalMultiUse قد لا تتمكن لتحرير نفسه في بيئة متعددة مؤشرات ترابط.
الحل
يتوفر الآن إصلاح جديد معتمد من Microsoft ولكن الغرض منه هو حل المشكلة الموضحة في هذه المقالة فقط. لذلك يجب استخدامه فقط مع الأنظمة التي تواجه هذه المشكلة بالتحديد.

ملاحظة يجب أن يكون لديك اتفاقية ترخيص Visual Studio للحصول على هذا الإصلاح العاجل.

لحل هذه المشكلة، اتصل بخدمات دعم المنتجات في Microsoft "للحصول على الإصلاح العاجل. للحصول على قائمة كاملة بأرقام الهاتف الخاصة بخدمات دعم منتج Microsoft وعلى معلومات حول تكاليف الدعم، قم بزيارة موقع Microsoft التالي على الويب:ملاحظة في بعض الحالات، قد يتم إلغاء المصروفات التي تُحتسب عادةً على مكالمات الدعم إذا قرر إخصائي الدعم لدى Microsoft أن تحديثًا معينًا سوف يعمل على حل المشكلة. سيتم تطبيق تكاليف الدعم المعتادة على أسئلة الدعم الإضافية والمشكلات التي لا يعمل على حلها هذا التحديث. يجب أن يكون للنسخة الإنجليزية من هذا الإصلاح سمات الملفات التالية أو أحدث:
   Date         Time        Version    Size     File name      ---------------------------------------------------------   29 May 2001  3:32:23 PM  6.0.92.37  1.32 MB  Msvbvm60.dll				

تصريح
أقرت Microsoft أن هذا خطأ في Microsoft المنتجات المسردة في بداية هذه المقالة.
معلومات أخرى

خطوات إعادة إنشاء في سلوك

إنشاء DLL مع فئة GlobalMultiUse

  1. إنشاء مشروع جديد DLL ActiveX فئة افتراضية Class1.
  2. من القائمة المشروع انقر فوق خصائص مشروع1. تغيير اسم المشروع إلى GMultiUseDll ثم انقر فوق موافق.
  3. في مربع الحوار خصائص تعيين خاصية Instancing Class1 إلى 6 - GlobalMultiUse.
  4. نسخ ولصق التعليمة البرمجية التالية إلى الوحدة النمطية للتعليمات البرمجية الخاصة Class1:
    Public Function ClassName() As String    ClassName = "Class1"End Function					
  5. من القائمة ملف، انقر فوق جعله GMultiUseDll.dll ترجمة المشروع. يتم إنشاء GMultiUseDll.dll.

إنشاء DLL مع فئة MultiUse

  1. إنشاء مشروع جديد DLL ActiveX فئة افتراضية Class1.
  2. من القائمة المشروع انقر فوق خصائص مشروع1. تغيير اسم المشروع إلى MultiUseDll ثم انقر فوق موافق.
  3. من القائمة المشروع انقر "مراجع" حدد خانة الاختيار GMultiUseDll.dll ومن ثم انقر فوق موافق.
  4. نسخ ولصق التعليمة البرمجية التالية إلى الوحدة النمطية للتعليمات البرمجية الخاصة Class1:
    Public Function GetString() As String    GetString = ClassNameEnd Function					
  5. من القائمة ملف، انقر فوق جعله MultiUseDll.dll ترجمة المشروع. يتم إنشاء MultiUseDll.dll.

إنشاء مشروع ActiveX EXE

  1. إنشاء مشروع جديد ActiveX EXE فئة افتراضية Class1.
  2. من القائمة المشروع انقر فوق خصائص مشروع1. تغيير اسم المشروع إلى TestServer ثم انقر فوق موافق.
  3. من القائمة المشروع انقر "مراجع" حدد خانة الاختيار MultiUseDll.dll ومن ثم انقر فوق موافق.
  4. من القائمة المشروع انقر فوق خصائص TestServer. في التبويب عام ، تعيين "تجمع مؤشرات الترابط" إلى 10 مؤشرات ترابط.
  5. نسخ ولصق التعليمة البرمجية التالية إلى الوحدة النمطية للتعليمات البرمجية الخاصة Class1
    Public Sub DoSomething()    Dim obj As MultiuseDll.Class1    Set obj = New MultiuseDll.Class1    obj.GetStringEnd Sub					
  6. من القائمة ملف، انقر فوق جعله TextServer.exe ترجمة المشروع. يتم إنشاء TextServer.exe.

إنشاء مشروع عميل

  1. إنشاء مشروع EXE قياسي جديد مع نموذج افتراضي Form1.
  2. من القائمة المشروع انقر فوق خصائص مشروع1. تغيير اسم المشروع إلى TestClient ثم انقر فوق موافق.
  3. إضافة تسمية (Label1) "و" مربع نص (النص1) "و" اثنين CommandButtons (Command1 و Command2) إلى Form1 ".
  4. نسخ ولصق التعليمة البرمجية التالية إلى الوحدة النمطية للتعليمات البرمجية الخاصة Form1:
    Dim bStop As BooleanPrivate Sub Command1_Click()    Dim oServer As Object    Set oServer = CreateObject("TestServer.Class1")    WaitTRUEinFile Text1.Text    oServer.DoSomething    Set oServer = Nothing    Label1.Caption = "The reference was released"End Sub' The purpose of this function is to synchronize the call to the' GlobalMultiUse DLL through the file Sync.txt.Private Sub WaitTRUEinFile(sFile As String)    Dim sFlag      As String    Label1.Caption = "Waiting for 'TRUE' in " & sFile    Do While bStop = False        Open sFile For Input As #1        Line Input #1, sFlag        Close #1                If UCase(Trim(sFlag)) = "TRUE" Then            Exit Do        End If        DoEvents    LoopEnd SubPrivate Sub Command2_Click()    bStop = TrueEnd SubPrivate Sub Form_Load()    Text1.Text = "c:\sync.txt"    Command1.Caption = "Start"    Command2.Caption = "Stop"    bStop = FalseEnd SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)    bStop = TrueEnd Sub					
  5. من القائمة ملف، انقر فوق جعله TestClient.exe ترجمة المشروع. يتم إنشاء TestClient.exe.

تشغيل في اختبار

  1. افتح المفكرة. إضافة حرف "t" إلى الموقع الأول ثم احفظ الملف كـ Sync.txt في جذر محرك الأقراص C.
  2. بدء تشغيل مثيلين من TestClient.exe. لاحظ أن عمليات TestClient.exe جهازي قيد التشغيل في إدارة المهام.
  3. انقر فوق بدء كل مثيلات TestClient.
  4. افتح Sync.txt. قم بتغيير السطر الأول إلى "true" ، ثم حفظ.

    بعد حفظ الملف تلاحظ عملية TestServer.exe في "إدارة المهام.
  5. انقر فوق إيقاف مثيلي TestClient وإغلاق النماذج. لاحظ وجود لم مثيلات تشغيل TestClient.exe. في هذه المرحلة، يبقى TestServer.exe تحميله.
للحصول على معلومات إضافية حول المشكلات المتعلقة multithreading في Visual Basic، انقر فوق رقم المقالة أدناه لعرضها في "قاعدة المعارف لـ Microsoft:
241896PRB: مؤشر الترابط التشعبي المشاكل مع مكونات ActiveX Visual Basic 6.0
multi-thread

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 300850 - آخر مراجعة: 02/28/2014 00:34:35 - المراجعة: 4.2

Microsoft Visual Studio 6.0 Service Pack 4, Microsoft Visual Studio 6.0 Service Pack 5, Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 4, Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 5, Microsoft Visual Basic 6.0 Professional Edition

  • kbnosurvey kbarchive kbmt kbbug kblocalsvr kbpending kbqfe KB300850 KbMtar
تعليقات