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

مساعدة مبرمج لمبرمج

مغلق
بدأه ATTAF_T في 16 يونيو 2004 · 7 رد · 1,095 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

ولكم الشكر أيها المحترفون

#2

السلام عليكم,

سأحاول إعطاك هذا في المرة المقبلة إن شاء الله.

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

إلى اللقاء.

#3

السلام عليكم,

كما وعدت سأضع هنا في الملف المرفق ملف DLL الذي يعطينا الرقم سريال للأقراص مع الكود الكامل لهذا وهو كود قصير جدا.

الملف DLL اسمه DiskSerial والدالة المصدرة اسمها GetDiskSerial وهي تبرمج كما يلي في الباسيك:

Private Declare Function GetDiskSerial Lib "D:\Prog\Dll_Asm\DiskSerial" (ByVal a As String) As Long

وطبعا هذا لدمج المكتبة إلى برنامجنا ونلاحظ هنا D:\Prog\Dll_Asm\DiskSerial ويجب بالطبع تغيير المسار الذي سنضع فيه الدالة أو حذف الإشارة إلى المسار ‘ذا وضعنا ملف DLL في نفس المسار للبرنامج EXE الذي يستعمل المكتبة أو في مجلد السيستم للوندوز . وبعد هذا يمكن أن نستعمل الدالة المصدرة كما يلي :

NumberSerial = GetDiskSerial ("C:\")

نعطي القرص الذي نريده في شكل مسار كما في مثال قرص C وبعد هذا يكون عندنا السيريال في العدد NumberSerial وهو من نوع Long . وغالبا ما نكتب النتيجة على شكل HexNumber وهنا نضيف فقط Hex(NumberSerial) إذا كنا فعلا نريد النتيجة بالهكس.

وللتأكد من النتيجة نفتح نافذة DOS ونقوم ب Dir c: وهنا سيعطينا السيريال لهذا القرص بالهكس ونفارنه مع نتيجة مكتبتنا.

إلى اللقاء.

TheDllFile.zip

#4

لك من الشكر فوق عدد الأحرف التي كتبتها

لكن يا سيدي الرقم التسلسلي للأقراص الصلبة موجودة في API واستدعاؤها سهل من فيجوال بيزيك لكن المطلوب الرقم التسلسلي للوحة الأمر أقصد BIOS Serial number

لك كامل الشكر على التعب الذي أبديته تجاه أخيك جزاك الله خيرا

#5

حاولت تقليد عملك مع الكود الذي عندي ولكن فشلت

أرسل لك الكود كاملا

ولك الشكر سلفا

zambsnt.zip

#6

السلام عليكم,

البرنامج الذي أعطيت هو يشتغل على عائلة NT وأنا ليس لدي مثل هذه الأشياء - أنا لا زلت أشتغل على 98 - ولكن سأحاول كيف أعمل الأشياء وتبقى التجربة سأحاول العثور على كمبيوتر يمكن أن أجرب عليه هذه الأشياء.

إلى اللقاء.

#7

أشكر لك حسن جوابك وسرعته

أبشرك أني نجحت بجعل هذا الكود DLL ولكن لم أستطع أن أحمل الدالة (الوظيفة) قيمة ما في الذاكرة

بل اضطررت لأن أكتبها بوساطة Createfile ثم قرأتها من الفيجوال بيزيك

لأني لا أعلم كيف يمكن أن أقرأ موقع ذاكرة من RAM مع أني استعملت Messagebox فأظهرت لي الموقع المطلوب في رسالة ولكن لم أستطع أن أضع محتويات تلك الحجرة في متغير (Variable) وهذا ما اضطرني لأستعمل WriteFile فقرأتها ووضعتها في ملف.

على كل لك الشكر

وأحب أن أغتنم فرصة احترافك في الأسيمبلي وخبرتي في الفيجوال لأقول:

ما هي ميزة الأسيمبلي اليوم ما دامت تستعمل دالات API ويندوز وهو أمر ممكن ومتاح في الفيجوال بل ما فعله المثال الذي أرسلته فعلته كاملاً في الفيجوال بيزيك لكني لم أفهم لماذا مرر المتغير بواسطة Offset ولم يمرره مباشرة.

على كل السؤال هل هذا منهم عزل للمبرمج عن البرمجة الحقيقة بالوصول إلى أعماق النظام والعتاد فيجعلون الوصول فقط من خلال API ويندوز فقط

ولك الشكر أخي

#8

السلام عليكم,

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

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

هذه بضع أمثلة ولكن إذا ما تعمقنا في عمق الحاسوب تضهر أكثر فأكثر ميزة الأسمبلر.

وهنا لا أريد أن أميز برنامج على آخر فقط لكل عمله ونختار البرنامج الذي نستعمله حسب الهدف الذي نتوخاه.

إذا كنت لم تستطع أن تحمل الدالة المصدرة من المكتبة تيقن أنها مذكورة في الملف def . وتيقن أنه عند البناء قد أضفنا الملف بنفس الإسم.

إلى اللقاء.

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

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