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

لماذا برنامجي لا يعمل على الأنظمة وغيره يعمل

مغلق
بدأه b.m.s في 6 أغسطس 2006 · 13 رد · 885 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سويت برنامج بسيط جداً يفتح ملف ويعدل فيه ويغلقه

وإشتغل على جهازي اللاب توب ونقلت الملف التنفيذي إلى جهاز آخر لكنه ما يشتغل رغم إنهم كلهم xp لكن المعالج يختلف

أعرف أن برامج ++C والـــ C لازم تترجمها على نفس نظام التشغيل أو على الأقل نفس مواصفاته

لكن توجد برامج كثيرة تقول إنها تشتغل على جميع معالجات بنتيوم مثلاً 386 وطالع وتشغلها على جهازك او على أي لاب توب

يشتغل تمام التمام .

كيف يتم ذلك ؟ وهل يوجد كمبايلر مخصص لذلك علما بأني ترجمتها على VS 2005 ؟

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

تم تعديل هذه المشاركة بواسطة b.m.s في 6 أغسطس 2006 في 12:42

#2

قد يكون السبب ان الملف اللذي تريد فتحه غير موجود في الجهاز الآخر ..؟

اقتباس
لكن المعالج يختلف

ما نوع المعالجات؟

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 6 أغسطس 2006 في 16:48

#3

أخوي حسن الملف اللي أبي افتحه أصلاً أنا أرسله عن طريق Command -line

وأيضا أنا حاط رسالة خطأ لكن البرنامج ما يفتح وتطلع لي رسالة تقول إن برنامج معطل -_-

ومعالج الDesktop حقي هو Puntium 4 اما الــlaptop فهوي Puntium M

ورغم إنهم من نفس السلالة إلا إني قلت يمكن يختلفون

وشاكر لك ردك

#5

ربما تستخدم ملفات غير موجودة على الجهاز الآخر (مثلا مكتبات MFC) أو [.نت]

يا ريت تحكيلنا شو المكتبات المستخدمة؟!

#6

'طيب حاو تغير اعدادات الـCompiler من debug الى release

#7

أخوي اسماعيل هذا هو كود البرنامج

#include<fstream>
#include<iostream>




int main(int argc , char ** argv)
{
	while(--argc)
	{
		std::fstream in(argv[argc],std::ios::in|std::ios::out |std::ios::binary | std::ios::trunc );

		if(!in.is_open())
		{
			std::cout<<"not open\n";
			return 0;
		}

		in.close();
	}

}

بسيط صح :D

وأخوي alawashiz

سويت release بس نفس المشكلة السابقة

#8
#include<fstream>
#include<iostream>
#include<conio.h>



int main(int argc , char ** argv)
{
	while(--argc)
	{
		std::fstream in(argv[argc],std::ios::in|std::ios::out |std::ios::binary | std::ios::trunc );

		if(!in.is_open())
		{
			std::cout<<"not open\n";
			getch();
						return 1;
		}
		else{
			std::cout<<"opened";
			in.close();
			getch();
		}
	}
return 0;
}

---

بهذا الشكل يعمل معي 100%

ولا ارى اي مشكله...

الله اعلم

#9
b.m.s كتب:

لكن توجد برامج كثيرة تقول إنها تشتغل على جميع معالجات بنتيوم مثلاً 386 وطالع وتشغلها على جهازك او على أي لاب توب

يشتغل تمام التمام .

كيف يتم ذلك ؟ وهل يوجد كمبايلر مخصص لذلك علما بأني ترجمتها على VS 2005 ؟

جزاكم الله خير خلاص ما أبي أعرف سبب عدم عمل برنامجي :^)

لكن ممكن تجاوبون على السؤال هذا اللي في الإفتباس :o

#10

السلام عليكم

اولاً يجب ان نعرف نوع السؤال والشخص السائل قبل ان نضع إقتراحات للاجابة, الاخ b.m.s محترف برمجة لذلك يجب ان نعرف انه حينما يطرح سؤال فهو بالتاكيد سؤال من الوزن الثقيل وليس مجرد ملف ناقص, او خلل فى المسار الخ...

دعني احاول الاجابة على سؤالك ولو اني لست متاكد إذا كان هذه هى الاجابة الصحيحة..

فى لغة الاسمبلي نحدد دائماً اقل نوع معالج يجب ان يتوفر فى النظام فى اول سطر فى البرنامج على النحو التالي

.386
.model flat,stdcall
option casemap:none

كما تلاحظ فى اول سطر المعالج لابد ان يكون 386 وهو اقل معالج مسموح به لعمل اى برنامج وندوز, ولكن فى هذه الحالة لا يسمح لنا استخدام floating point ولا MMX ولا اى من التعليمات الجديدة التى ظهرت معى ظهوى 486 فما فوق...

طبعاً استطيع ان اكتب 686 ولا استخدم اي تعليمات جديدة ولكن فى هذه الحالة يصبح برنامج محدود لاجهزة البنتيوم 2 فما فوق رغم انني استطيع فقط بتغير الرقم إلى 586 ان اجعله يعمل على الانظمة القديمة ايضاً مثل البنتيوم او البنتيوم برو...

للاسف لا اعرف كيف يتم تحديد نوع المعالج فى VS2005 ولكن اتوقع ان تكون هذه هي المشكلة التى تواجهك ...

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

تعديل

اها صحيح انت قلت ان المعالج هو بينتيوم ام, طيب انا ممكن اجربة على P2 وإذا اشتغل استطيع فى العمل ان اجربة على بنتيوم ام ايضاً إن شاء الله..

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#11

السلام عليكم

اقتباس
علما بأني ترجمتها على VS 2005 ؟

عند الترجمة باستجدام ال vs2005 فان البرنامج الناتج يكون معتمد على المكتبات التالية وهما

MSVCP80D.DLL   =  ms C++ runtime library
MSVCR80D.DLL   =  ms C runtime library

النسخة 8 اي تأتي مع vs2005

وممكن مش موجودة علي الجهاز الأخر

فالبرنامج يحتاج وجود هذه المكتبات للعمل

ترجم البرنامج علي MS VC++ 6 compiler

وحاول تشغلة على الخهاز الاخر

لان البرنامج الناتج يكون معتمد على مكتبات الوندوز

والله اعلم

تم تعديل هذه المشاركة بواسطة Mo7eb_Alrasool في 8 أغسطس 2006 في 09:16

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#12

أخوي أحمد

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

الرد لك ما باليد حيلة تعرفني لازم ألقى حل .

وبالنسبة للأسمبلي أفا عليك ما تتذكر الأسئلة الثقيلة يوم كنت أسألك في منتدى الاسمبلي

ما كنت تشوف إسمي في الموضوع الإ تقول الله المستعان .

وبرنامج ollydbg موجود عندي وقد كسرت فيه حماية برنامجين لكن بصراحة هذه الفكرة

ما قد خطرت في بالي وراح أجربها ومشكور مرة ثانية .

هلا أخوي Mo7eb_Alrasool

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

ملفات وندوز لكن راح أجربه وأرد لك خبر . ومشكور على الرد

#13

سبب عدم عمل البرنامج هو السبب الذي جعل انتل تعمل عائلة جديدة من المعالجات

يعني انتل عملت العائلة الاولى اللي كلنا نعرفها x86 و كانت كما يلي:

البرامج التي تستخدم المعالج الحالي لا تستطيع استخدام المعالج الاحدث منه في نفس العائلة

و طبعا دا فرض عليهم قيود

عشان كدا عملو عائلة جديدة (انتيوم)

مشكلتك حلها بسيط

ترجم برنامجك على اقدم معالج عندك 386 طبعا

و حتلاقيه اشتغل على كل المعالجات الي من نفس العائلة

ملاحظة انا كلامي مش 100% اعتقد ذلك ممكن تلاقي اخطاء بس طريق الحل صحيحة و جربها

مفيش توقيع

#14
b.m.s كتب:
سويت برنامج بسيط جداً يفتح ملف ويعدل فيه ويغلقه

وإشتغل على جهازي اللاب توب ونقلت الملف التنفيذي إلى جهاز آخر لكنه ما يشتغل رغم إنهم كلهم xp لكن المعالج يختلف

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

السلام عليكم

اظن المشكلة كما قال الأخ Mo7eb_Alrasool هناك DLL ناقص في الجهاز او شيء من هذا القبيل...

كل اللوم على صاحب VC2005 :D

راجع هذا قد يفيدك:

Escape from DLL Hell with Custom Debugging and Instrumentation Tools and Utilities

او لا تستخدم VC2005...هناك الكثير غيره

d4baa0.gif

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…