আমি dll এবং exe ফাইলের মধ্যে সঠিক পার্থক্য জানতে চাই।
আমি dll এবং exe ফাইলের মধ্যে সঠিক পার্থক্য জানতে চাই।
উত্তর:
EXE:
ডিএলএল:
আরও বিশদের জন্য: http://www.c-sharpcorner.com/Interviews/Answer/Answers.aspxQuestionId=1431&MajorCategoryId=1&MinorCategoryId=1 http://wiki.answers.com/Q/What_is_the_differences_between_an_EXLaa_
তথ্যসূত্র: http://www.dotnetspider.com/forum/34260-What-differences-between-dll-exe.aspx
LibMain
ফাংশনের মাধ্যমে কোনও থ্রেড শুরু বা বন্ধ হয়ে গেলে কোনও প্রক্রিয়াতে প্রতিটি ডিএলএল একটি বিজ্ঞপ্তি পেতে পারে।
আমি জানি না কেন প্রত্যেকে .NET এর প্রসঙ্গে এই প্রশ্নের উত্তর দিচ্ছে। প্রশ্নটি একটি সাধারণ ছিল এবং কোথাও নেটও উল্লেখ করেনি।
ঠিক আছে, প্রধান পার্থক্যগুলি হ'ল:
এক্সই
ডিএলএল
ডিএলএল এবং এক্সের ফাইল ফর্ম্যাটটি মূলত একই। উইন্ডোজ ফাইলে পিই শিরোলেখের মাধ্যমে ডিএলএল এবং এক্সই এর মধ্যে পার্থক্যটি স্বীকার করে। পিই শিরোলেখ বিশদ জন্য, আপনি এমএসডিএন এই নিবন্ধটি একবার দেখতে পারেন
পার্থক্যটি হ'ল কোনও EXE এর একটি এন্ট্রি পয়েন্ট থাকে, একটি "মূল" পদ্ধতি যা কার্যকর হয় run
একটি ডিএলএল এর মধ্যে কোডটি অন্য অ্যাপ্লিকেশন থেকে কল করা প্রয়োজন।
আপনি উল্লেখ করতে পারেন কাঠামো সংক্রান্ত আরও কয়েকটি পার্থক্য রয়েছে।
Characteristics
সদস্যকে দেখতে পারেন । একটি ডিএলএল এর জন্য এটিতে (0x2000) পতাকা চালু আছে। একটি EXE এর জন্য এটি (0x2) পতাকা।IMAGE_FILE_HEADER
IMAGE_NT_HEADERS
IMAGE_FILE_DLL
IMAGE_FILE_EXECUTABLE_IMAGE
IMAGE_OPTIONAL_HEADER
) ImageBase
সদস্য হয়। এটি ভার্চুয়াল ঠিকানাটি নির্দিষ্ট করে যেখানে পিই অনুমান করে যে এটি লোড হবে। যদি এটি অন্য ঠিকানায় লোড করা হয় তবে কিছু পয়েন্টার ভুল স্মৃতিতে নির্দেশ করতে পারে। যেহেতু EXE ফাইলগুলি তাদের নতুন ঠিকানার জায়গায় লোড হওয়া প্রথমটির মধ্যে রয়েছে তাই উইন্ডোজ লোডার একটি ধ্রুবক লোড ঠিকানা নিশ্চিত করতে পারে এবং এটি সাধারণত 0x00400000। ডিএলএল-এর জন্য সেই বিলাসিতা নেই। একই প্রক্রিয়াতে লোড হওয়া দুটি ডিএলএল ফাইল একই ঠিকানার জন্য অনুরোধ করতে পারে। এই কারণেই কোনও ডিএলএলের বেস রিলোকেশন ডিরেক্টরি নামে একটি অন্য ডেটা ডিরেক্টরি রয়েছে যা সাধারণত নিজস্ব বিভাগে থাকে .reloc
। এই ডিরেক্টরিতে ডিএলএলে স্থানগুলির একটি তালিকা রয়েছে যা পুনরায় বা প্যাচ করা দরকার যাতে তারা সঠিক স্মৃতিতে নির্দেশ করে। বেশিরভাগ EXE ফাইলগুলির এই ডিরেক্টরি নেই তবে কিছু পুরানো সংকলক এগুলি উত্পন্ন করে।আপনি এমএসডিএন এই বিষয়ে আরও পড়তে পারেন ।
এই উত্তরটি আমি যা ভেবেছিলাম তার চেয়ে কিছুটা বেশি বিশদ ছিল তবে এটি পড়েছি।
ডিএলএল:
বেশিরভাগ ক্ষেত্রেই, একটি ডিএলএল ফাইল একটি লাইব্রেরি হয় । বিভিন্ন ধরণের লাইব্রেরি রয়েছে, গতিশীল এবং স্থির - পার্থক্যটি সম্পর্কে পড়ুন । ডিএলএল ঘোরা গতিশীল লিংক গ্রন্থাগার যা আমাদের বলে যে এটি একটি এর অংশ প্রোগ্রামের কিন্তু না পুরো জিনিস। এটি পুনরায় ব্যবহারযোগ্য সফ্টওয়্যার উপাদান ( গ্রন্থাগার ) দিয়ে তৈরি যা আপনি একক প্রোগ্রামের চেয়ে বেশি ব্যবহার করতে পারেন । মনে রাখবেন যে কপিরাইট-পেস্ট ব্যবহার করে অনেক অ্যাপ্লিকেশনগুলিতে গ্রন্থাগার উত্স কোড ব্যবহার করা সর্বদা সম্ভব, তবে একটি ডিএলএল / স্ট্যাটিক লাইব্রেরির ধারণাটি হ'ল আপনি একটি লাইব্রেরির কোড আপডেট করতে এবং একই সাথে সমস্ত অ্যাপ্লিকেশন আপডেট করে ব্যবহার করতে পারেন এটি - সংকলন ছাড়াই
উদাহরণস্বরূপ:
কল্পনা করুন আপনি একটি বোতামের মতো একটি উইন্ডোজ জিইউআই উপাদান তৈরি করছেন । বেশিরভাগ ক্ষেত্রে আপনি আপনার লেখা কোডটি পুনরায় ব্যবহার করতে চান কারণ এটি একটি জটিল তবে একটি সাধারণ উপাদান - আপনি অনেক অ্যাপ্লিকেশন এটি ব্যবহার করতে চান তবে আপনি তাদের উত্স কোডটি দিতে চান না আপনি অনুলিপি করতে পারবেন না প্রতিটি প্রোগ্রামে বোতামের কোডটি পেস্ট করুন, যাতে আপনি সিদ্ধান্ত নেন যে আপনি একটি ডিএল-লাইব্রেরি (ডিএলএল) তৈরি করতে চান ।
এই "বোতাম" গ্রন্থাগার দ্বারা প্রয়োজন বোধ করা হয় EXE এর চালানোর জন্য cutables, এবং এটি ছাড়া তারা চলবে না, কারণ তারা বোতাম তৈরি করার পদ্ধতি জানি না, শুধুমাত্র কিভাবে এটা কথা বলতে।
তেমনি, একটি ডিএলএল কার্যকর করা যায় না - চালানো যায় কারণ এটি প্রোগ্রামের কেবল একটি অংশ তবে "প্রক্রিয়া" তৈরি করতে প্রয়োজনীয় তথ্য নেই ।
এক্সই:
এক্সিকিউটেবল হ'ল প্রোগ্রাম । এটি কীভাবে একটি প্রক্রিয়া তৈরি করতে হয় এবং কীভাবে ডিএলএলের সাথে কথা বলতে হয় তা জানে । একটি বোতাম তৈরি করার জন্য এটির ডিএলএল প্রয়োজন এবং এটি ছাড়া অ্যাপ্লিকেশনটি চালিত হয় না - ERROR।
আশাকরি এটা সাহায্য করবে....
using SomeClassFromALibrary
, লাইব্রেরিটি কোনও ডিএলএল এর মাধ্যমে প্রকল্পের সাথে যুক্ত হয়? আমি সঠিকভাবে বুঝতে পারছি কিনা তা দেখার চেষ্টা করছি
using
ক্লাস নয়, নেমস্পেসের জন্য কীওয়ার্ডটি ব্যবহার করেন । ব্যতিক্রম using static
সি # 6 থেকে উপলভ্য যা নির্দিষ্ট ক্লাসে উপস্থিত সমস্ত স্থির সদস্যকে আমদানি করে ( লিঙ্ক )। using
শব্দ কম্পাইলার করার জন্য একটি অঙ্গীকার করা হয়েছে যে রানটাইম সেখানে যে সম্বলিত একটি গ্রন্থাগার হতে হবে দেয় নামস্থান । লাইব্রেরিটি সেই ডিএলএল দিয়ে প্রকল্পের সাথে সংযুক্ত নয়, ডিএলএল লাইব্রেরি যা প্রকল্পের (সমাবেশ) সাথে সংযুক্ত থাকে। সেই ডিএলএলে সমস্ত কোড রয়েছে যা সংকলনের সময় প্রতিশ্রুতি দেওয়া হয়েছিল।
ডিএলএল এবং এক্সই উভয়ই পোর্টেবল এক্সিকিউটেবল (পিই) ফর্ম্যাট
একটি ডায়নামিক-লিঙ্ক লাইব্রেরি (ডিএলএল) একটি লাইব্রেরি এবং তাই সরাসরি সম্পাদন করা যায় না। আপনি যদি এটি চালানোর চেষ্টা করেন তবে আপনি একটি অনুপস্থিত এন্টি পয়েন্ট সম্পর্কে একটি ত্রুটি পাবেন। মৃত্যুদন্ড কার্যকর করার জন্য এটিতে একটি এন্ট্রি পয়েন্ট (মূল ফাংশন) প্রয়োজন, সেই এন্ট্রি পয়েন্টটি কোনও অ্যাপ্লিকেশন বা এক্সি হতে পারে। ডিএলএল বাইন্ডিং রান-টাইমে ঘটে। এ কারণেই এর নাম "ডায়নামিক লিঙ্ক" লাইব্রেরি।
একটি সম্পাদনযোগ্য (EXE এর) একটি প্রোগ্রাম যা মৃত্যুদন্ড কার্যকর করা যেতে পারে। এটির নিজস্ব প্রবেশের স্থান রয়েছে। পিই শিরোলেখের অভ্যন্তরে একটি পতাকা নির্দেশ করে যে এটি কোন ধরণের ফাইল (ফাইল এক্সটেনশনের অপ্রাসঙ্গিক)। পিই শিরোনামের একটি ক্ষেত্র রয়েছে যেখানে প্রোগ্রামের প্রবেশের পয়েন্টটি থাকে। ডিএলএলগুলিতে এটি ব্যবহার করা হয় না (বা অন্তত কোনও এন্ট্রি পয়েন্ট হিসাবে নয়)।
শিরোনাম সম্পর্কিত তথ্য যাচাই করার জন্য অনেকগুলি সফ্টওয়্যার রয়েছে । উভয়কে আলাদাভাবে কাজ করার কারণ কেবলমাত্র তফাতটি নীচের চিত্রের মতো দেখানো হয়েছে the
এক্সই ফাইলটিতে কেবল একক প্রধান প্রবেশ থাকে মানে এটি বিচ্ছিন্ন অ্যাপ্লিকেশন, যখন কোনও সিস্টেম এক্সপি চালু করে, একটি নতুন প্রক্রিয়া তৈরি হয় যখন ডিএলএলগুলির অনেকগুলি এন্ট্রি পয়েন্ট থাকে তাই যখন অ্যাপ্লিকেশন এটি ব্যবহার করে কোনও নতুন প্রক্রিয়া শুরু না হয়, তখন ডিএলএল পুনরায় ব্যবহার এবং সংস্করণ করা যায়। ডিএলএল স্টোরেজ স্পেস হ্রাস করে কারণ বিভিন্ন প্রোগ্রাম একই ডিএল ব্যবহার করতে পারে।
.exe
বা .dll
কোন ব্যাপার না? এটি শিরোনামে এই পতাকাটি সত্যই তাদের আলাদা করে দেয় .... তাই আমি যদি exe
জিইউআই মিথস্ক্রিয়াটির মাধ্যমে কোনও নাম তৈরি করি এবং নামটি রাখি .dll
তবে সেই পতাকাটি ম্যানুয়ালি বদলানো, এটি এখনও চালানো যায় না?
Dll v / s Exe
1) ডিএলএল ফাইল হ'ল ডায়নামিক লিঙ্ক লাইব্রেরি যা এক্স ফাইল এবং অন্যান্য ডিএল ফাইলগুলিতে ব্যবহার করা যেতে পারে।
এক্সই ফাইলটি একটি এক্সিকিউটেবল ফাইল যা ওএস দ্বারা পরিচালিত একটি পৃথক প্রক্রিয়াতে চলে।
2) ডিএলএলগুলি সরাসরি সম্পাদনযোগ্য নয়। এগুলি হ'ল পৃথক ফাইল যা ফাংশনযুক্ত যা প্রোগ্রাম এবং অন্যান্য ডিএলএল দ্বারা কম্পিউটার এবং ফাংশন সম্পাদন করতে ডাকে।
একটি এক্সই একটি প্রোগ্রাম যা কার্যকর করা যায়। উদাঃ উইন্ডোজ প্রোগ্রাম
3)
পুনরায় ব্যবহারযোগ্য ডিএলএল: এগুলি অন্য কিছু অ্যাপ্লিকেশনের জন্য পুনরায় ব্যবহার করা যেতে পারে। কোডার যতক্ষণ না ডিএলএল ফাইলের ফাংশন এবং পদ্ধতিগুলির নাম এবং প্যারামিটারগুলি জানে।
এক্সই: কেবল নির্দিষ্ট উদ্দেশ্যে।
৪) একটি ডিএলএল কলিং অ্যাপ্লিকেশনের একই প্রক্রিয়া এবং মেমরি স্পেস ভাগ করবে যখন কোনও
এক্সই তার পৃথক প্রক্রিয়া এবং মেমরির স্থান তৈরি করে।
5)
ডিএলএল ব্যবহার করে : আপনি এটি ব্যবহার করতে অনেক অ্যাপ্লিকেশন চান তবে আপনি তাদের উত্স কোডটি দিতে চান না আপনি প্রতিটি প্রোগ্রামের বোতামের কোডটি অনুলিপি করতে পারবেন না, তাই আপনি সিদ্ধান্ত নিন আপনি একটি ডিএল- তৈরি করতে চান গ্রন্থাগার (ডিএলএল)।
EXE: যখন আমরা উইন্ডোজ ফর্ম অ্যাপ্লিকেশনগুলি, কনসোল অ্যাপ্লিকেশনগুলি, ডাব্লুপিএফ অ্যাপ্লিকেশন এবং উইন্ডোজ পরিষেবাদির মতো প্রকল্প টেম্পলেটগুলির সাথে কাজ করি তারা সংকলিত হয়ে গেলে তারা একটি এক্সেল সমাবেশ জেনারেট করে।
)) সাদৃশ্য:
ডিএলএল এবং এএসইই উভয়ই বাইনারি ফাইলগুলির পোর্টেবল এক্সিকিউটেবল ফর্ম্যাট দ্বারা সংজ্ঞায়িত একটি জটিল নেস্টেড কাঠামো রয়েছে এবং এটি ব্যবহারকারীদের দ্বারা সম্পাদনযোগ্য করার উদ্দেশ্যে নয়।
দুটি জিনিস: এক্সটেনশন এবং ফাইলে সংরক্ষিত শিরোনামের পতাকা।
দুটি ফাইলই পিই ফাইল। উভয় ঠিক একই লেআউট ধারণ করে। একটি ডিএলএল একটি লাইব্রেরি এবং তাই কার্যকর করা যায় না। আপনি যদি এটি চালানোর চেষ্টা করেন তবে আপনি একটি অনুপস্থিত এন্ট্রি পয়েন্ট সম্পর্কে একটি ত্রুটি পাবেন। একটি এক্সই একটি প্রোগ্রাম যা কার্যকর করা যায়। এটিতে একটি এন্ট্রি পয়েন্ট রয়েছে। পিই শিরোলেখের অভ্যন্তরে একটি পতাকা নির্দেশ করে যে এটি কোন ফাইল টাইপ (ফাইল এক্সটেনশন সম্পর্কিত নয়)। পিই শিরোলেখের একটি ক্ষেত্র রয়েছে যেখানে প্রোগ্রামের প্রবেশের পয়েন্টটি থাকে। ডিএলএলগুলিতে এটি ব্যবহার করা হয় না (বা অন্তত কোনও এন্ট্রি পয়েন্ট হিসাবে নয়)।
একটি ছোট পার্থক্য হ'ল বেশিরভাগ ক্ষেত্রে ডিএলএলগুলির একটি রফতানি বিভাগ থাকে যেখানে প্রতীকগুলি রফতানি হয়। EXE গুলির কাছে কখনই রফতানি বিভাগ থাকা উচিত নয় কারণ তারা গ্রন্থাগার নয় তবে কিছুই এটিকে ঘটতে বাধা দেয়। Win32 লোডার কোনওভাবেই যত্ন করে না।
তা ছাড়া তারা অভিন্ন। সুতরাং, সংক্ষেপে, এক্সইগুলি এক্সিকিউটযোগ্য প্রোগ্রামগুলি হয় যখন ডিএলএলগুলি একটি প্রক্রিয়াতে লোড করা গ্রন্থাগার হয় এবং এতে সুরক্ষা, ডাটাবেস অ্যাক্সেস বা কোনও কিছুর মতো কার্যকর কার্যকারিতা থাকে।
.Exe প্রোগ্রাম। .Dll একটি লাইব্রেরি যা একটি .exe (বা অন্য কোনও .dll) কল করতে পারে।
সত্যজিগ্নেশ যা বলেন তা সত্য হতে পারে। এককটি অন্যটি ব্যবহার করতে পারে যেন এটি একটি গ্রন্থাগার ছিল, এবং এটি কিছু সিওএম উপাদান দিয়ে করা হয়েছে (উদাহরণস্বরূপ)। এই ক্ষেত্রে, "স্লেভ"। এক্স একটি পৃথক প্রোগ্রাম (কঠোরভাবে বলতে গেলে, একটি পৃথক প্রক্রিয়া - সম্ভবত একটি পৃথক মেশিনে চলছে) তবে এটি যা অন্যান্য প্রোগ্রাম / উপাদানগুলি / যাই হোক না কেন অনুরোধ গ্রহণ করে এবং পরিচালনা করে।
তবে, আপনি যদি আপনার প্রোগ্রাম ফাইলগুলির একটি ফোল্ডার থেকে কেবল একটি এলোমেলো .exe এবং .dll বাছাই করেন, তবে প্রতিক্রিয়াগুলি যে COM প্রাসঙ্গিক নয় - সেগুলি কেবল একটি প্রোগ্রাম এবং এটির গতিযুক্ত-সংযুক্ত লাইব্রেরি।
উইন 32 এপিআই ব্যবহার করে একটি প্রোগ্রাম লোডলিবারি এবং গেটপ্রোকএড্রেস এপিআই ফাংশন, আইআইআরসি ব্যবহার করে একটি ডিএলএল লোড এবং ব্যবহার করতে পারে। উইন 16 এ একই রকম ফাংশন ছিল।
সিওএম অনেকভাবেই ডিএলএল ধারণার বিবর্তন, মূলত ওএইএল 2 এর ভিত্তি হিসাবে স্বীকৃত, যেখানে নেট নেট সিওএমের বংশধর। ডিএলএলগুলি উইন্ডোজ 1, আইআইআরসি থেকে প্রায় রয়েছে। এগুলি মেমরির ব্যবহার হ্রাস করার জন্য একাধিক চলমান প্রোগ্রামের মধ্যে বাইনারি কোড (বিশেষত সিস্টেম এপিআই) ভাগ করার এক উপায় ছিল।
একটি এক্সইইএস নিয়মিত উইন 32 এক্সিকিউটেবল হিসাবে সিস্টেমে দৃশ্যমান। এর এন্ট্রি পয়েন্টটি একটি ছোট লোডারকে বোঝায় যা .NET রানটাইম আরম্ভ করে এবং এটি এক্সই-র অন্তর্ভুক্ত সমাবেশটি লোড করতে এবং চালিত করতে বলে। একটি ডিএলএল একটি উইন 32 ডিএলএল হিসাবে সিস্টেমে দৃশ্যমান তবে সম্ভবত কোনও প্রবেশের বিন্দু ছাড়াই। .NET রানটাইম তার নিজস্ব শিরোনামে থাকা সমাবেশ সম্পর্কে তথ্য সঞ্চয় করে।
dll হ'ল পুনরায় ব্যবহারযোগ্য ফাংশনগুলির একটি সংগ্রহ যেখানে একটি .exe একটি এক্সিকিউটেবল যা এই ফাংশনগুলিকে কল করতে পারে
একটি এক্সি এক্সিকিউটেবল প্রোগ্রাম যেখানে একটি ডিএলএল এমন একটি ফাইল যা প্রোগ্রামগুলি দ্বারা গতিশীলভাবে লোড এবং সম্পাদন করা যেতে পারে।
Ex .exe এবং dll হ'ল সি # কোডের সংকলিত সংস্করণ যা এ্যাসেম্বলিস নামেও ডাকা হয়।
Ex .exe একা একা নির্বাহযোগ্য ফাইল, যার অর্থ এটি সরাসরি চালানো যেতে পারে exec
D। Dll একটি পুনরায় ব্যবহারযোগ্য উপাদান যা সরাসরি সম্পাদন করা যায় না এবং এটি কার্যকর করতে অন্যান্য প্রোগ্রামের প্রয়োজন হয় requires
1) ডিএলএল একটি ইন-প্রসেস উপাদান যা ক্লায়েন্ট প্রক্রিয়া হিসাবে একই মেমরি স্পেসে চলছে। EXE একটি আউট-প্রক্রিয়া উপাদান যা এর অর্থ এটি পৃথক পৃথক মেমরি স্পেসে চলে।
2) ডিএলএলে এমন ফাংশন এবং পদ্ধতি রয়েছে যা অন্যান্য প্রোগ্রামগুলি ব্যবহার করতে পারে (পুনর্বিবেচনার প্রসারণ করে) যখন এক্সই অন্যান্য প্রোগ্রামগুলির সাথে ভাগ করা যায় না।
3) ডিএলএল সরাসরি চালানো যায় না কারণ এগুলি লোড করা এবং অন্যান্য প্রোগ্রাম দ্বারা চালিত করার জন্য ডিজাইন করা হয়েছে। এক্সই একটি প্রোগ্রাম যা সরাসরি সম্পাদিত হয়।
সংক্ষিপ্ত উত্তর খুঁজছেন তাদের জন্য,
একটি এমন সমাবেশ একটি বর্গ লাইব্রেরি রূপে কম্পাইল এবং ব্যবহার করা অন্যান্য সমাহারকে ধরনের উপলব্ধ করা হয়, তাহলে এটি ifle এক্সটেনশন .dll
(গতিশীল লিঙ্ক লাইব্রেরি), এবং এটি স্বতন্ত্র মৃত্যুদন্ড কার্যকর করা যাবে না।
তেমনিভাবে , যদি কোনও অ্যাসেম্বলিটি অ্যাপ্লিকেশন হিসাবে সংকলিত হয়, তবে এতে ফাইল এক্সটেনশন .exe
(এক্সিকিউটেবল) রয়েছে এবং স্ট্যান্ডেলোন এক্সিকিউট করা যেতে পারে। .NET কোর 3.0 এর আগে, কনসোল অ্যাপ্লিকেশনগুলি .dll fles তে সংকলন করা হয়েছিল এবং ডটনেট রান কমান্ড বা একটি হোস্ট এক্সিকিউটেবল দ্বারা কার্যকর করা হয়েছিল। - উত্স
ডিএলএল এবং এক্সইয়ের মধ্যে প্রধান সঠিক পার্থক্য যে ডিএলএল একটি এন্ট্রি পয়েন্ট পায় নি এবং এক্সই করেছে does আপনি যদি সি ++ এর সাথে পরিচিত হন তবে দেখতে পাবেন যে বিল্ড EXE এর মূল () প্রবেশের ফাংশন রয়েছে এবং ডিএলএল নেই :)