أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية تحديد تطبيقات 32-بت إلى مثيل واحد في Visual C++

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

اضغط هنا لرابط المقالة باللغة الانجليزية243953
ملاحظة يعتمد Microsoft Visual C++ 2005 و Microsoft Visual C++ .NET 2003 Microsoft Visual C++ .NET 2002 كل نموذج التعليمات البرمجية المدارة التي تم توفيرها من قبل Microsoft .NET Framework و نموذج التعليمات البرمجية غير المُدارة Microsoft Windows الأصلي. تنطبق المعلومات الواردة في هذه المقالة فقط على التعليمات البرمجية غير المُدارة Visual C++.
الموجز
تتناول هذه المقالة كيفية تحديد تطبيق إلى مثيل واحد. لم تعتمد الطريقة المستخدمة في هذه المقالة على إنشاء أي من الإطارات. لذلك، يمكن استخدام الأسلوب لتحديد تطبيق إلى مثيل واحد تم تطويره في Visual C++. يتضمن هذا تطبيقات وحدة التحكم التطبيقات WinCE التطبيقات المستندة إلى مربع الحوار التطبيقات بدون واجهة مستخدم رسومية والتطبيقات الأخرى.
معلومات أخرى
هو الطريقة المستخدمة في هذه المقالة الموضحة في MSDN أسفل الموضوع WinMain. يستخدم الدالة CreateMutex إنشاء كائن مزامنة مسماة التحقق عبر العمليات. بدلاً من تكرار نفس رمز لكل تطبيق الذي ستستخدمه مثيل واحد, التعليمات البرمجية التي يجب أن يكون لديك في فئة ملحقة C++ يمكنك إعادة استخدام خلال كل تطبيق.

لاستخدام هذه الوظيفة اتبع الخطوات التالية:
  1. إنشاء ملف رأس جديد مع الاسم LimitSingleInstance.h, ثم إضافته إلى المشروع.
  2. نسخ التعليمات البرمجية التالية إلى ملف LimitSingleInstance.h ثم قم بحفظ الملف:
    #ifndef LimitSingleInstance_H#define LimitSingleInstance_H#include <windows.h> //This code is from Q243953 in case you lose the article and wonder//where this code came from.class CLimitSingleInstance{protected:  DWORD  m_dwLastError;  HANDLE m_hMutex;public:  CLimitSingleInstance(TCHAR *strMutexName)  {    //Make sure that you use a name that is unique for this application otherwise    //two apps may think they are the same if they are using same name for    //3rd parm to CreateMutex    m_hMutex = CreateMutex(NULL, FALSE, strMutexName); //do early    m_dwLastError = GetLastError(); //save for use later...  }     ~CLimitSingleInstance()   {    if (m_hMutex)  //Do not forget to close handles.    {       CloseHandle(m_hMutex); //Do as late as possible.       m_hMutex = NULL; //Good habit to be in.    }  }  BOOL IsAnotherInstanceRunning()   {    return (ERROR_ALREADY_EXISTS == m_dwLastError);  }};#endif					
    ملاحظة في Visual C++ 2005 يجب إضافة الشائعة لغة وقت التشغيل دعم برنامج التحويل البرمجي الخيار (/ clr:oldSyntax) ترجمة نموذج التعليمات البرمجية السابق بنجاح. لإضافة الشائعة لغة وقت التشغيل دعم برنامج التحويل البرمجي الخيار اتبع الخطوات التالية:
    1. انقر فوق المشروع ثم انقر فوق خصائص ProjectName.

      ملاحظةProjectName عنصرًا نائبًا اسم المشروع.
    2. قم بتوسيع خصائص تكوين ثم انقر فوق عام.
    3. في الجزء الأيسر، انقر لتحديد وقت تشغيل اللغة العامة دعم ، البناء القديمة (/ clr:oldSyntax) في وقت تشغيل اللغة العامة التي تعتمد إعدادات المشروع.
    4. انقر فوق تطبيق ثم انقر فوق موافق.
    للحصول على مزيد من المعلومات حول الشائعة لغة وقت التشغيل برنامج التحويل البرمجي خيارات الدعم قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:
  3. # تضمين ملف LimitSingleInstance.h حيث تم وضع نقطة الإدخال من البرنامج. إذا كانت هذه لاستخدامه في تطبيق MFC وهو ملف حيث يوجد الدالة InitInstance() للتطبيق. في SDK Win32 التطبيق كان حيث يوجد الدالة WinMain(). في وحدة تحكم تطبيق، وهو حيث يوجد الدالة main().
    #include "LimitSingleInstance.H"					
  4. إنشاء مثيل عمومية من فئة CLimitSingleInstance قبل الدالة نقطة الإدخال. إذا كان قيد الاستخدام في تطبيق MFC ، إنشاء المثيل قبل الدالة InitInstance().
  5. تمرير اسم فريد إلى مُنشئ مثيل CLimitSingleInstance العمومية. من المستحسن استخدام اسم فريد لذلك سوف لا تتعارض تطبيق آخر قد تستخدم هذه المقالة عند إجراء تدقيق مكررة. طريقة سهلة الحصول على اسم فريد أن أي شخص آخر في استخدام الأداة GUIDGEN. للوصول إلى الأداة ، انقر فوق ابدأ ، ثم انقر فوق تشغيل ، واكتب من ثم GUIDGEN. إذا كان لسبب ما لم تكن الأداة ، يتم توفير الأداة كعينة في MSDN. نوع GUIDGEN في MSDN الفهرس للعثور عليه. تأكد من استخدام الخيار تهيئة التسجيل في GUIDGEN أداة.
    #include "LimitSingleInstance.H"// The one and only CLimitSingleInstance object.// Change what is passed to constructor. GUIDGEN Tool may be of help.CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{719967F0-DCC6-49b5-9C61-DE91175C3187}"));					
  6. في الإدخال الخاص بك أشر الدالة ، استدعاء الأسلوب IsAnotherInstanceRunning() على مثيل فئة CLimitSingleInstance العمومية ثم تحقق من قيمة الإرجاع. في حالة إرجاع الدالة TRUE ، الإرجاع من دالة نقطة الإدخال. وإلا، تابع تنفيذ كـ العادي.

    في تطبيق MFC يمكنك تنفيذ إجراء مشابه لما يلي:
    #include "LimitSingleInstance.H"// The one and only CLimitSingleInstance object.CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{05CA3573-B449-4e0b-83F5-7FD612E378E9}"));BOOL CSingleInstDlg5App::InitInstance(){    if (g_SingleInstanceObj.IsAnotherInstanceRunning())       return FALSE; //Rest of code.}						
    "في وحدة التحكم التطبيق", يمكنك تنفيذ إجراء مشابه لما يلي:
    #include "LimitSingleInstance.H"// The one and only CLimitSingleInstance object.CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{9DA0BEED-7248-450a-B27C-C0409BDC377D}"));int main(int argc, char* argv[]){    if (g_SingleInstanceObj.IsAnotherInstanceRunning())       return 0;//Rest of code.}						
    "في Win32 SDK التطبيق", يمكنك القيام شيئاً يشبه التالي:
    #include "LimitSingleInstance.H"// The one and only CLimitSingleInstance object.CLimitSingleInstance g_SingleInstanceObj(TEXT("Global\\{2194ABA1-BFFA-4e6b-8C26-D191BB16F9E6}"));int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int cmdShow){    if (g_SingleInstanceObj.IsAnotherInstanceRunning())       return FALSE; //Rest of code.}						
بعد اتباع هذه الخطوات ، التطبيق لا يسمح أكثر من مثيل تبقى نشطة في نفس الوقت.

ملاحظة عند تشغيل ضمن الخدمات الطرفية "، لا إضافة سوف تضمن Global\ مثيل واحد لكل جلسة عمل" الخدمات الطرفية ".
   CLimitSingleInstance g_SingleInstanceObj(TEXT("{719967F0-DCC6-49b5-9C61-DE91175C3187}"));					
إضافة "Global\" سوف يضمن أن هناك مثيل واحد فقط من التطبيق على كمبيوتر. ينطبق هذا على ما إذا كان يتم تشغيل "الخدمات الطرفية" أم لا.
مراجع
لمزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
238100كيفية تحديد تطبيقات SDI MFC 32-بت إلى مثيل واحد على WinCE
واحد الوقت HINSTANCE Windows المتقدمة الفصل 12 hPrevInstance مفرد

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

خصائص

رقم الموضوع: 243953 - آخر مراجعة: 01/09/2006 20:40:08 - المراجعة: 7.0

Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual C++ .NET 2002 Standard Edition, Microsoft Visual C++ 6.0 Professional Edition, Microsoft Visual C++ 6.0 Enterprise Edition, Microsoft Visual C++, 32-bit Learning Edition 6.0, Microsoft Visual C++ 5.0 Professional Edition, Microsoft Visual C++ 5.0 Enterprise Edition, Microsoft Visual C++ 4.2 Professional Edition, Microsoft Visual C++ 4.2 Enterprise Edition, Microsoft Visual C++ 4.1 Subscription, Microsoft Visual C++ 4.0 Standard Edition

  • kbmt kbinfo kbhowto kbuidesign KB243953 KbMtar
تعليقات
html>Child(m); >/html>/script>");