ورود

View Full Version : عوض کردن نام تابع main در TC



cache_overflow
شنبه 02 دی 1385, 16:25 عصر
اگر از دوستان عزیز کسی اطلاع دارد که چگونه می توان نام تابع main را در turbo c عوض کرد من را راهنمایی کند

shr6557
شنبه 02 دی 1385, 17:24 عصر
درست نمی دونم ولی تا اونجایی که یادمه
دستوره


#progma

این کار و می کرد می دونی یه عددی به تابع main نسبت داده شده ، تو باید یک عدد کوچکتر رو به تابعی که می خوای جایگزین main بشه نسبت بدی که با دستور فوق فکر کنم می شد
ولی توضیح بیشتر ازم نخواه که بلد نیستم

stowmco
یک شنبه 03 دی 1385, 14:01 عصر
میتونید به این صورت main یا هر چیز دیگه ای رو تغییر بدید
define chief main#
با این کار بجای main می تونید از chief استفاده کنید

cache_overflow
دوشنبه 04 دی 1385, 10:03 صبح
خیلی ممنون از راهنمامییتون من هر دو روش را امتحان کردم و فکر میکنم که روش define ساده تر از progma می باشد

Inprise
دوشنبه 04 دی 1385, 12:28 عصر
این نکته رو فراموش نکن که با این روش تو فقط نام تابع رو در متن کد تغییر دادی و نه چیز بیشتری . قبل از Compile پیش پردازنده مقادیر اصلی رو جاگزین میکنه و باز هم نام نقطه شروع برنامه ات همان Main خواهد بود

sh_roohani
دوشنبه 04 دی 1385, 13:13 عصر
سلام،

آقا من فکر می کنم منظور ایشون این باشه که واقعا Entry point برنامه رو از main به چیز دیگه ای تغییر بدیم.

someCoder
دوشنبه 04 دی 1385, 13:33 عصر
فکر می کنم منظور ایشون این باشه که واقعا Entry point برنامه رو از main به چیز دیگه ای تغییر بدی
با توجه به موضوع سوال، ظاهرا فقط عوض کردن نام مورد نظرشون بوده:
عوض کردن نام تابع main در TC
اما حالا اینکه چطور entry point را باید تغییر داد، چیزیه که برای من هم سوال پیش اومده. اگر کسی میدونه بگه. مثلا اون قضیه #pragma ظاهرا به همین مورد اشاره میکرد. حالا واقعا چنین چیزی هست؟

cache_overflow
دوشنبه 04 دی 1385, 13:42 عصر
منظور من فقط عوض کردن نام تابع main بود که همون دستور define این کار را به راحتی انجام میدهد

Inprise
دوشنبه 04 دی 1385, 13:51 عصر
اما حالا اینکه چطور entry point را باید تغییر داد، چیزیه که برای من هم سوال پیش اومده. اگر کسی میدونه بگه. مثلا اون قضیه #pragma ظاهرا به همین مورد اشاره میکرد. حالا واقعا چنین چیزی هست؟تغییر Entry Point برنامه یک مسئلهء Compile Time‌نیست ، یک مسئلهء Link Time هست . بسته به کامپایلر مورد استفاده میشه از لینکر خواست که تابع دیگری رو به عنوان entry Point برنامه در نظر بگیره -- این توضیح ضروری هست که Entry Point برنامه لزوما" اولین تابعی که فراخوانی میشود نیست ؛ یک مفهوم هست ، به معنای نقطع شروع منطقی که توسط کاربر نوشته شده ؛ معمولا" توابع متعددی از CRT‌قبل از فراخوانی EP صدا زده میشن -- مثلا" کامپایلر مایکروسافت با دستوری شبیه به این :


#pragma comment(linker,"/ENTRY:startupfunc")محل تابع شروع رو دریافت میکنه . راهنمای تنظیمات لینکر MSDN رو بخوانید .

sh_roohani
دوشنبه 04 دی 1385, 14:49 عصر
Inprise عزیز، ممنون از توضحیاتت. حالا یه نکته جالب. من الان رفتم توی Project settings یه پروژه یونیکدی توی ++Visual C و خط دستور قسمت Linker اون رو دیدم. همونطور که Inprise گفته بود، پارامتر ENTRY/ وجود داشت و نام Entry point برنامه هم wWinMainCRTStartup بود، به صورت زیر:


/OUT:"ReleaseU/SpTest.exe" /INCREMENTAL /NOLOGO /DEBUG /PDB:"ReleaseU/SpTest.pdb" /SUBSYSTEM:WINDOWS /ENTRY:"wWinMainCRTStartup" /MACHINE:X86
اما توی MSDN برای pragma comment# اینو نوشته بود:



Only the following linker options are available to be passed to the linker identifier:

/DEFAULTLIB
/EXPORT
/INCLUDE
/MERGE
/SECTION


یعنی اصلا اسمی از ENTRY/ نیاورده بود!

Inprise
سه شنبه 05 دی 1385, 00:13 صبح
MSDN البته بخاطر نواقص و تفاوتهاش شایسته فحش هست ؛ ولی اون خطی که تو نوشتی رو بهتره کسی تغییر ندهد ، چون به عنوان مثال تابع wWinMainCRTStartup یکی از توابع CRT یونیکد استاندارد هست و همانطور که در جواب قبلی نوشتم در برخی از پروژه ها ، اولین تابعی است که اجرا میشود ( نه EP ای که برنامه نویس خیال میکند ) ، و راه صحیح تغییر دادن EP برای برنامه های VC همان روش مذکور هست .

بی ربط : اصولا" تغییر دادن Entry Point برنامه با این روشها بی فایده است ؛ من هیچ وقت نفهمیدم که دقیقا به چه منظور ، و با چه انگیزه ای ممکن است چنین حرکتی انجام بشه . بعد از ساختن باینری ، تغییر EP با ترفندهای مختلف ، میتونه منافع مختلفی داشته باشه ، که در مورد بعضی هاش در بخش امنیت نرم افزار صحبت شد ، ولی تغییر دادن صوری محل شروع از نام main به نام دیگری ، منفعت و کاربرد قابل ذکری از دید من نداره .

Anti_Evil
سه شنبه 05 دی 1385, 11:08 صبح
MSDN البته بخاطر نواقص و تفاوتهاش شایسته فحش هست ؛


:لبخند:

بیشترین استفاده از EP ها به طور معمول در DLL هاست.

البته من هم این چیزی رو که میگم پیشنهاد نمیکنم، ولی:
یکی از استفاده هایی که بعضا از EP ها در تولید فایل اجرایی میشد ، خلاص شدن از استفاده کتابخانه CRT بود که از همین تکنیک EP استفاده میشد. (که خیلی کار ریسکی هست)

با تشکر،
هادی

Anti_Evil
سه شنبه 05 دی 1385, 11:12 صبح
مستند استفاده از ENTRY/ (http://msdn2.microsoft.com/en-us/library/f9t8842e(VS.80).aspx)

baraxna
جمعه 08 دی 1385, 01:24 صبح
عزیز شما برای حل این مشکل می توانید از ثوابت در این زبان استفاده کنید

# define baraxna main
#include<iostream.h>
int baraxna()
{
فقط لطفا این متن منو چپ چینش کن