الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحميل OCX بمسجل النظام

مغلق
بدأه MMA_EG_Cairo في 18 يوليو 2007 · 22 رد · 2,470 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

إخواني الكرام ، تحية طيبة وبعد ،

أنا معتاد بأنني أقوم بتحميل أي ملف DLL بمسجل النظام كما يلي بشاشة الدوس :

regsvr32 /S C:\DLLName.dll

ولكن عند تحميل OCX بمسجل النظام ، أقوم بوضع الـ OCX الخاصة

بالبرنامج في نفس المسار الحالي للبرنامج.

فما هي طريقة تحميل ملف الـ OCX بمسجل النظام برمجياً أو بأي طريقة أخري

مع العلم أن ملف الآداة من تصميمي الخاص

وشكراً لكم جميعاً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#3

أكرك أخي الكريم علي الرد

فعاً نفذت نفس الأمر وإشتغل معايا ، وآسف علي اللإزعاج ،

لكن أخي الكريم ، أنا أستخدمت هذه الآداه مع برامج EXE

ثم بعد ذلك أقوم بإجراء تعديل للمشروع ال OCX ، وأقوم

إعادة ترجمة المشروع ، بعد ذلك يؤدي الي حدوث خطأ

للمشروع Exe ويقول لي أن الملف غير مدعوم ومعرف

وهذه المشكلة أيضاً تحدث لي عند تصميم مكتبة DLL وإجراء

تعديل بها

فما هي المشكلة ؟

ولماذا هذه الأدوات لا تعمل مع أي نظام تشغيل ، علي سبيل

المثال إذا قمت بإجراء OCX / DLL / EXE علي نظام

تشغيل XP لا يعمل علي WinMe أو 2000 أو Win98

وشكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#4

بعد التعديل على ملف المكتبة وترجمتها الى DLL او OCX تتغير يعني الملف التنفيذي يعرف الأداة القديمة في الريجيستري ولا يعرف الأداة الجديدة المكونة

لذلك يجب عند تغيير اي شئ في المكتبة أو الأداة اعادة تسجيلها

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

يمكنك عمل ملف BAT يقوم تسجيل الأداة أو المكتبة يدويا باضافة سطر التسجيل

بالتوفيق دائما

#5

أشكرك أخي الكريم

وجزاك الله كل الخيرات

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#6

بسم الله الرحمن الرحيم

إخواني أعضاء المنتدي الكرام ، تحية طيبة وبعد ،

أعزروني لفتح هذا الموضوع مرة أخري ، ولكنني رأيت مشكلة أخري متعلقة بهذا الموضوع فأحببت أن لا أكررة مرة أخري .

إخواني الكرام ، أنا رأيت برنامج مصمم بالفيجوال بيزيك مع إحدي العملاء ، هذا البرنامج يقوم بالبحث عن كافة المكتبات ( DLL,OCX ) الموجودة علي المسار الحالي وتحميلة بمسجل النظام وعرض النتائج علي ListBox .

أنا أستخدم الأمر RegSvr32 من داخل الدوس ، أو إضافتة بملف من نوع Bat ، ولكن ما أنا أريدة الآن هو كيفية تحميل المكتبات بمسجل النظام من داخل الـ VB ودون إستخدام الدوس ، وبأي طريقة ممكنة سواء بتوابع الـ API أو بمكتبات جاهزة علي الحاسب .

وشكراً

---------------------------------------------------------------------------------------------------

إخواني الكرام ، خلال الفترة السابقة سألت سؤال للأخ DreamNet عن عملية تسجيل المكتبات كل مرة بالتطبيقات عند إعادة ترجمة المكتبة من جديد ، وقال لي أن عند ترجمة المكتبة من جديد وتحويلها الي DLL أو OCX يقوم بتعديل الـ GUID الخاص بمسجل النظام . فوجدت الحل من إحدي أصدقائي وهو :

1- فتح خصائص المشروع الخاص بالمكتبة من قائمة Project .

2- الذهاب الي التبويب الثالث Combonent .

3- في الفرام الخاص بـ Version Compatibility يتم إختيار الخيار Binary Compatibility .

وذكر لي صديقي أن الخيار ( No Compatibility ) يلغي عملية التسجيل بمسجل النظام ، أما الخيار ( Project Compatibility ) يقوم بتسجيل GUID جديد بمسجل النظام كل مرة يتم إجراء Compaly للمكتبة ، مما يؤدي الي حتمية تعريف المكتبة بكل مشروعاتي كما قال الأخ ( DreamNet ) ، أما الخيار الأخير ( Binary Compatibility ) يقوم بإجراء تعديل علي المكتبة دون تغيير الـ GUID ولكن يجب إنشاء المكتبة كمكتبة جديدة ( Project Compatibility ) ، ثم بعد ذلك التحويل الي خيار التعديل مرة أخري .

إخواني ، أنا جربت ما قاله لي صديقي ووجدت أن كلامة صحيح ، ولكن رجاء المساعدة للتوضيح بين الثلاثة خيارات بالضبط ، وهل ما قاله صديقي أمر صحيح ، أم سيؤثر علي برنامجي بعد فترة .

--------------------------------------------------------------------------------------------------

وشكراً للجميع

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#7
Register Server (2)
#8

أخي MSayed2004 ، تحية طيبة وبعد ،

الإنسان عندما يكون غارقاً يرسل إلية طوق النجاة !!

****

وعندما يكون الإنسان مريضاً ، فيلجاً الي الدواء !!

****

أخي الكريم ، الله عز وجل هو النجاة والدواء وكل الصفات الكريمة للإنسان .

****

لم أقول لك شعار من الشعائر المعتادة . ولم أقل لك أنت طوق النجاة .

بل أقول لك أخي الكريم أستمر في هذا الأسلوب فالله لا يضيع أجر من

أحسن عملاً

****

فبصراحة أخي الكريم ، منذ بدايتي في هذا المنتدي الكريم ( منذ شهر ) .

لم تصمت عن مساعدتك لي ولزملائك . في المنتدي .

ذاد الله من علمك ..............

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#9

إخواني الكرام ، تحية طيبة وبعد ،

أشكركم علي معاونتكم لي الغالية ، لكن هناك شيء آخر وقف عقبة أمامي ، أنا

عرفت كيف أقوم بتحميل مكتبات DLL وعناصر تحكم OCX بمسجل النظام ،

بفضل الأخ MSayed2004 ، ولكن مشكلتي الآن هي !!!!!

كيف أتحقق من وجود مكتبة معينة بمسجل النظام ، بمعني أدق ، أنا لدي ملف

DLL تحت إسم Dialogs.dll ، المفروض أنني أقوم بتحميلة بمسجل

النظام قبل تشغيل الملف التنفيذي EXE ولكن في حالة وجودة بمسجل النظام

ألغي عملية التحميل .

كيف يتم ذلك ؟ وكيف أعرف أن المكتبة مخزنة بالفعل بمسجل النظام ؟

وشكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#10
Option Explicit

Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long

Private Function ComponentExists(ComponentName As String) As Boolean
    Dim hLib As Long
    hLib = LoadLibrary(ComponentName)
    FreeLibrary hLib
    ComponentExists = CBool(hLib)
End Function

Private Sub Form_Load()
MsgBox "Shell32 exist ? = " & ComponentExists("shell32.dll")
MsgBox "Kernel32 exist ? = " & ComponentExists("kernel32.dll")
MsgBox "Virus.dll exist ? = " & ComponentExists("virus.dll")
MsgBox "mscomctl32 exist ? = " & ComponentExists("MSCOMCTL.OCX")
End Sub


'· lpLibFileName
'Points to a null-terminated string that names the executable module (either a .DLL or .EXE file). The name specified is the filename of the module and is not related to the name stored in the library module itself, as specified by the LIBRARY keyword in the module-definition (.DEF) file.
'If the string specifies a path but the file does not exist in the specified directory, the function fails. When specifying a path, be sure to use backslashes (\), not forward slashes (/).
'If a path is not specified and the filename extension is omitted, the default library extension .DLL is appended. However, the filename string can include a trailing point character (.) to indicate that the module name has no extension. When no path is specified, the function searches for the file in the following sequence:
'1. The directory from which the application loaded.
'2. The current directory.
'3. Windows 95: The Windows system directory. Use the GetSystemDirectory function to get the path of this directory.
'Windows NT: The 32-bit Windows system directory. Use the GetSystemDirectory function to get the path of this directory. The name of this directory is SYSTEM32.
'4. Windows NT: The 16-bit Windows system directory. There is no Win32 function that obtains the path of this directory, but it is searched. The name of this directory is SYSTEM.
'5. The Windows directory. Use the GetWindowsDirectory function to get the path of this directory.
'6. The directories that are listed in the PATH environment variable.
'The first directory searched is the one directory containing the image file used to create the calling process (for more information, see the CreateProcess function). Doing this allows private dynamic-link library (DLL) files associated with a process to be found without adding the process’s installed directory to the PATH environment variable.
'Once the function obtains a fully qualified path to a library module file, the path is compared (case independently) to the full paths of library modules currently loaded into the calling process. These libraries include those loaded when the process was starting up as well as those previously loaded by LoadLibrary but not unloaded by FreeLibrary. If the path matches the path of an already loaded module, the function just increments the reference count for the module and returns the module handle for that library.
#11

انصحك اخي الكريم القراءة جيدا عن موضوع المكتبات dll خاصة اذا كان برنامجك موجود عند عدة زبائن وذلك حتى لا تتغلب كثيرا .

كذلك ليس بالاهمية الكبرى معرفة المكتبة موجودة في ملف النظام ام لا بقدر معرفة توافقها مع برنامجك بمعنى اخر قد يكون عندك دالة

sub SayHello

وبعد ذلك اقتضت الضرورة تغييرها الى

sub SayHello(msg as string)

مما يؤدي الى خلل في البرنامج عند طلب هذه الدالة وليس عند طلب البقية

انصحك بما يلي :

يجب المحافظة على Binary Compatibility

وضع دالة في المكتبة على سبيل المثال

function dllVersion as long

بحيث ترجع رقم ما وقد يكون على صيغة تاريخ (20070801 ) وطلب هذه الدالة في البرنامج ومقارنتها وعلى اساسها تقوم بنسخ وتسجيل للمكتبة .

عدم اضافة دوال او فئات جديدة للمكتبة (ان امكن ذلك ) بل قبل ذلك وضعها في البرنامج التنفيذي حتى تصل مرحلة من الثبات وبعد ذلك تقوم بنقلها .

وبالنسبة لكيفية تسجيل ونسخ المكتبات هذا بالاضافة الى ما ذكر الاخ محمد يوجد برنامج الاعداد الذي يتم توزيعه مع Package & dep Wzrd وهو مفتوح المصدر و موجود في احد مجلدات vs6 حيث يمكن معرفة تعقيدات تسجيل المكتبات

وللعلم فقط هذا الموضوع يطلق عليه جحيم المكتبات ( dll hell) وقد قامت مايكروسوفت بمعالجته في .Net

#12

أشكرك أخي الكريم علي الرد السريع ،

أخي الكريم ، الحمد لله أنا بالفعل قرأت كتب كثيرة من مكتبة المعهد والمنتديات وكتب خاصة عن تصميم مكتبات DLL وعناصر تحكم OCX ، والحمد لله انا قمت بإنشاء مكتبة خدمات خاصة بي تحتوي علي 10 ديالوج وجاري تصميم الديالوج رقم 11 . أما عن عناصر التحكم فقمت بتصميم OCX واحد يحتوي علي 16 آداة .

ليست هذه أدوات جديدة ، بل مجرد تطوير للأدوات القديمة بحيث أن تساعدني علي عدم التكرار .

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

أخي الكريم ، كما قلت لك أنني قرأت العديد من الكتب بفضل الله عز وجل ، ولكن أخي لاحظ أن معظم الكتب مجرد كتب تعليمية ، وليست كتب إحترافية ومعظم هذه الكتب تتشابه وليس هناك أي جديد ما بينهم إلا القليل . لذلك أنا أحاول طرح كافة الأسئلة التي لم أراها من قبل سواء في بناء الـ DLL أو الـ OCX أو الـ EXE أو مسجل النظام أو ........ الي آخرة. وفي نفس الوقت يجب أن تعلم جيداً أن أي مشاركة في هذا المنتدي أقرأها حتي ولو كان متكرراً لعلي وعسي أن يكون هناك الجديد .

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

أشكرك أخي الكريم كثيراً علي هذه النصيحة الغالية ، فبالفعل من واجبات المرأ إذا وجد أي خطأ فعلية بإصلاحة

أشكرك أخي الكريم وأشكر جميع الأعضاء والمشتركين ،

وشكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#13

السلام عليكم ورحمة الله وبركاته

في الحقيقة اكيد التجربة تلعب دور في هذا المجال وبحكم انك جربت عدة طرق فأردت أغتنام الفرصة لأسئلك عن تجربتك مع createobject لاستدعاء الدوال الموجودة في المكتبة المسجلة

كنت قدر جربتها في السابق ولا أعرف هل تنجح دائما ومتى لا تنجح

بالتوفيق للجميع

#14
اقتباس
عن تجربتك مع createobject لاستدعاء الدوال الموجودة في المكتبة المسجلة

LoadLibrary تكفى لذلك ( أنت كنت انا فهمت قصدك ) , مثال من الـ API Guide عنها :

'Create a new project and add this code to Form1
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long
Private Sub Form_Load()
	On Error Resume Next
	'KPD-Team 1999
	'URL: http://allapi.mentalis.org/
	'E-Mail: KPDTeam@Allapi.net
	'We're going to call an API-function, without declaring it!
	Dim lb As Long, pa As Long
	'map 'user32' into the address space of the calling process.
	lb = LoadLibrary("user32")
	'retrieve the address of 'SetWindowTextA'
	pa = GetProcAddress(lb, "SetWindowTextA")
	'Call the SetWindowTextA-function
	CallWindowProc pa, Me.hWnd, "Hello !", ByVal 0&, ByVal 0&
	'unmap the library's address
	FreeLibrary lb
End Sub
#15

شكرا أخي العزيز لكن ماأردت قصده هو طريقة انشاء الكلاس عن طريق الدالة CreateObject لاني اريد أعرف مدى نجاحها لان الأخ أكيد جربها

ان شاء الله راح أحضر مثال في هذا السياق

#17

أخي الكريم ، تحية طيبة وبعد ،

الأمر CreateObject يقوم بإدراج كائن مسجل في مسجل النظام علي متغير للإستفادة منها ، علي سبيل المثال ، لدي مكتبة بها فئة Class تحتوي علي إجراء يدعي CalcSum ، والفئة تدعي Calc ، أما إسم المشروع يدعي Calcs . وهذا هو إجراء CalcSum :

Public Function CalcSum(Num1 As Single,Num2 As Single) As Single
	   CalcSum = Num1 + Num2
End Function

أولا : يجب أولاً تخزين المكتبة بمسجل النظام ، وذلك بعدة طرق :

1- أثناء إجراء Compaily للبرنامج.

2- تحميلة من ملف Bat - Dos .

3- تحميلة بإستخدام توابع API .

ثانياً : يتم إستخدام الأمر CreateObject كما يلي ، مثال :

Dim objCalc As New Calcs.Calc
Label1.Caption = objCalc.CalcSum(10,15)

------------------------------------------------------------

وهناك مثال آخر عن كيفية إستخدام الأمر CreateObject .

من الطبيعي أنك تقوم بإدراج المكتبة الخاصة بالتعامل مع قاعدة البيانات ، سواء DAO أو ADO أو RDO من نافذة Refrences !!!!!!

فبدلاً من اللجوء الي إضافة المكتبة بالبرنامج بهذه الطريقة يمكنك بإستخدام الكود التالي :

Dim Cn	As Object
Dim Rs	As Object
Const mCon As String = "إدراج نص الإتصال مع قاعدة بيانات أكسيس"

Set Cn = CreateObject("ADODB.Connection")
Set Rs = CreateObject("ADODB.Recordset")
Cn.Open mCon & App.Path & "\DB.mdb"
Rs.Open "Select Emp_Name From Emp Order By Emp_ID",Cn

Do While Not Rs.EOF
	List1.AddItem Rs("Emp_Name")
	Rs.MoveNext
Loop

Set Rs = Nothing
Set Cn = Nothing

علي العموم هذه أمثلة بسيطة وأتمني أن يكون طلبك

وشكراً

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#18

شكرا أخي الكريم على التوضيح

أنا أعرف طريقة استعمال الدالة وقد ادرجت مثال بسيط استخدم فيه CreateObject على مكتبة صغيرة

لكن ماأردت معرفته منك هو عندما تكون عندي مكتبة كبيرة هل يمكن الوصول الى كل الدوال الموجودة بالمكتبة بالطريقة هذه دائما

وشكرا مرة أخرى

#19

من رأيي أن أفضل الطرق للربط مع المكتبات هي طريقة Refrances من قائمة Projects ، لأننا نري جميع ما بداخل المكتبة بوحدة نمطية معينة ، مثلاً الفئى ( Function ) التي قمت بإدراجها بالمثال .

علي نفس المثال المدرج ، قم بالذهاب الي المشروع TestDLL ، من قائمة Project إختر Refrances ، ستظهر لك نافذة قم بالنقر علي زر أمر Browse وقم بتحديد مسار المكاتبة . ثم بعد ذلك قم بتحديد المكتبة MyDll من قائمة السرد الموجودة أمامك . ثم بعد ذلك قم بكتابة الكود التالي :

Dim objMyDll As New MyDll.Function

Call objMyDll.Go

فهذا الأسلوب أفضل 100 مرة من طريقة CreateObject في نظري علي الأقل . والله أعلم .

علي العموم أنا عدلت في المثال .

---------------------------------------------

اقتباس
Private Declare Function GO Lib "MyDLL.dll" () As Long

ما أهمية وجود هذا الكود ؟

▲ 1

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#20

آسف ، هذا هو المثال ،

Code.rar

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#21

عند استخدام CreateObject لا يجب تسجيل المكتبة في references في الفيحوال بيسك لكن يجب ان تكون مسجلة في الويندوز عن طريق regsvr32 وهذه الطريقة تسمى late binding وتكون ابطئ من الطريقة العادية early binding بسبب ان البرنامج يقوم بالتعرف على هذه المكتبة اثناء التشغيل وفي الطريقة العادية تتم كتابة تعريفات المكتبة والدوال في البرنامج اثناء عمل compile لذلك ينصح باستخدام early binding والتي يتم استخدامها عن طريق new لكن احيانا نضطر الى استخدام هذه الطريقة عنما تكون هذه المكتبة غير معروفة لنا مثل تطبيقات الاوفيس حيث كما نعرف هناك عدة نسخ من الاوفيس ولضمان ان تعمل على جميع هذه النسخ نستخدم createobject .

وينصح باستخدام createobject عندما تكون لديك مكتبة متغيرة كثيرا اي تقوم بالتعديل عليها كثيرا وذلك حتى تضمن التوافق بين هذه المكتبة والنسخ المتعددة من برنامجك

ولمزيد م التوضيح

لدي الفئة 1 class عند عمله كمكتبه يأخذ رقم معقد {11111.11111.111111}

به الدالة calc تأخذ ايضا رقم معقد {2222.222.22222}

عند عمل ملف تشغيلي يتم تسجيل هذه الارقام به

الان مايحدث يتم اضافة دالة جديدة calc2 الى الفئة calss1

class1 يأخذ نفس الرقم {111111111} طبعا عندما تكون binary compatibility

calc تأخذ رقم جديد {333333333333}

calc2 ايضا رقم جديد

عند الزبون تم تحديث الملف التشغيلي فقط او المكتبة فقط مايحدث

اذا استخدمت new والتي هي early binding لن يعمل البرنامج وسيعطي خطأ

اما اذا استخدمت createobject سيعمل البرنامج بشكل صحيح

#22

أهلا أخ MMA_EG_Cairo

السطر لا يعني شئ كنت قد عملت dll بال vc++ وكنت أجربه فقط ونسيت السطر :rolleyes:

شكرا على المداخلة من جديد أخ طارق

بالتوفيق دائما للجميع

#23

مشكورين جميعا

هذا الموضوع مغلق.

مواضيع مشابهة