.NET 4.0 এর জন্য আপডেট করুন এবং আরও বেশি ফ্রেম ওয়ার্কস
নেট নেট ২.০ এর সময় জিজ্ঞাসিত এটি একটি পুরানো প্রশ্ন, যখন মিক্সড মোড ডিএলএলগুলির পক্ষে সমর্থনের ক্ষেত্রে এলোমেলো ডেডলকের ঝুঁকির গুরুতর সূচনা হয়। । নেট 4.0 হিসাবে, মিশ্র মোড ডিএলএলগুলির সূচনা পরিবর্তন হয়েছে। এখন আরম্ভের দুটি পৃথক পর্যায় রয়েছে:
- নেটিভ ইনিশিয়েশন, ডিএলএল-এর প্রবেশ পয়েন্টে ডাকা হয়, যার মধ্যে নেটিভ সি ++ রান-টাইম সেটআপ এবং আপনার DllMain পদ্ধতির প্রয়োগ রয়েছে।
- পরিচালিত সূচনা, সিস্টেম লোডার দ্বারা স্বয়ংক্রিয়ভাবে কার্যকর করা।
যেহেতু # 2 পদক্ষেপটি লোডার লকের বাইরে সঞ্চালিত হয়, তাই কোনও অচল তাল নেই। বিশদটি মিক্সড অ্যাসেমব্লিজগুলির সূচনাতে বর্ণিত হয়েছে ।
আপনার মিশ্র মোড অ্যাসেমব্লিকে কোনও দেশীয় এক্সিকিউটেবলের থেকে লোড করা যায় তা নিশ্চিত করার জন্য, আপনাকে কেবলমাত্র যা পরীক্ষা করতে হবে তা হ'ল DllMain পদ্ধতিটি স্থানীয় কোড হিসাবে ঘোষিত হয়েছে। #pragma unmanaged
এখানে সহায়তা করতে পারে:
#pragma unmanaged
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
...
}
এটাও গুরুত্বপূর্ণ যে DllMain প্রত্যক্ষ বা অপ্রত্যক্ষভাবে যে কোনও কোড কল করতে পারে সেগুলিও নিয়ন্ত্রণহীন। এটি DllMain দ্বারা ব্যবহৃত কার্যকারিতার ধরণের সীমাবদ্ধ করার জন্য অর্থবোধ করে যাতে আপনি DllMain থেকে সমস্ত কোড পৌঁছতে পারবেন এবং নিশ্চিত করুন যে এটি সমস্তটি সংকলিত হয়েছে #pragma unmanaged
।
সংকলক আপনাকে C4747 কে ওয়ার্নিং দিয়ে কিছুটা সহায়তা করে যদি এটি সনাক্ত করে যে ডেলমেইনকে নিয়ন্ত্রণহীন হিসাবে ঘোষণা করা হয়নি:
1> Generating Code...
1>E:\src\mixedmodedll\dllmain.cpp : warning C4747: Calling managed 'DllMain': Managed code may not be run under loader lock, including the DLL entrypoint and calls reached from the DLL entrypoint
যাইহোক DllMain অপ্রত্যক্ষভাবে অন্য কোনও পরিচালিত ক্রিয়াকলাপ কল করলে সংকলক কোনও সতর্কতা উত্পন্ন করবে না, তাই আপনাকে কখনই ঘটবে না তা নিশ্চিত করতে হবে অন্যথায় আপনার অ্যাপ্লিকেশন এলোমেলোভাবে অচল হয়ে যেতে পারে।