আমি কিউটি উত্স কোড এর মতো দেখেছি:
class Q_CORE_EXPORT QBasicAtomicInt
{
public:
...
};
কোন Q_CORE_EXPORT
ম্যাক্রো নীচের মত সংজ্ঞা দেয়:
define Q_DECL_IMPORT __declspec(dllimport)
সুতরাং আসলে __declspec(dllimport)
কি মানে?
আমি কিউটি উত্স কোড এর মতো দেখেছি:
class Q_CORE_EXPORT QBasicAtomicInt
{
public:
...
};
কোন Q_CORE_EXPORT
ম্যাক্রো নীচের মত সংজ্ঞা দেয়:
define Q_DECL_IMPORT __declspec(dllimport)
সুতরাং আসলে __declspec(dllimport)
কি মানে?
উত্তর:
__declspec
একটি মাইক্রোসফ্ট-নির্দিষ্ট বৈশিষ্ট্য যা আপনাকে স্টোরেজ-শ্রেণীর তথ্য নির্দিষ্ট করতে দেয়।
(নিতপিকারের কর্নার: তবে, অন্যান্য সংকলক বিক্রেতারা যেমন জিসিসি — এখন মাইক্রোসফ্টের সংকলকগুলিকে লক্ষ্য করে লেখা কোডের ইনস্টলড বেসের সাথে সামঞ্জস্যের জন্য এই ভাষা বর্ধনকে সমর্থন করে Some কেউ কেউ অতিরিক্ত স্টোরেজ-শ্রেণীর বৈশিষ্ট্যও সরবরাহ করে))
ঐ স্টোরেজ ক্লাসের চারিত্রিক বৈশিষ্ট্য আছে যেগুলো নির্দিষ্ট করা যেতে পারে দুটি dllimport
এবং dllexport
। এগুলি সংকলককে নির্দেশ করে যে কোনও ফাংশন বা অবজেক্ট একটি ডিএলএল থেকে আমদানি বা রফতানি করা হয় (যথাক্রমে)।
আরও নির্দিষ্টভাবে, তারা মডিউল-সংজ্ঞা প্রয়োজন ছাড়াই ক্লায়েন্টের কাছে ডিএলএল এর ইন্টারফেস সংজ্ঞায়িত করে (.DEF
) ফাইলের । বেশিরভাগ লোকেরা এই ভাষা এক্সটেনশানগুলি ডিইএফ ফাইল তৈরির চেয়ে বেশি সহজ ব্যবহার করে।
সুস্পষ্ট কারণে __declspec(dllimport)
এবং __declspec(dllexport)
সাধারণত একে অপরের সাথে জুড়ি দেওয়া হয়। আপনি dllexport
কোনও ডিএলএল থেকে রফতানি হিসাবে প্রতীক চিহ্নিত করতে ব্যবহার করেন এবং আপনি dllimport
অন্য রফতানি হওয়া প্রতীকটি আমদানি করতে ব্যবহার করেন।
এর কারণ হিসাবে এবং ডিএলএল সংকলন করার সময় এবং ডিএলএল ইন্টারফেস গ্রাহক ক্লায়েন্ট কোডে একই হেডার ফাইলটি সাধারণত ব্যবহৃত হয়, ম্যাক্রো সংজ্ঞায়িত করার জন্য এটি একটি সাধারণ প্যাটার্ন যা স্বয়ংক্রিয়ভাবে সংকলনের সময় উপযুক্ত বৈশিষ্ট্য বিশিষ্টতার সাথে সমাধান হয় ol উদাহরণ স্বরূপ:
#if COMPILING_DLL
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
এবং তারপরে রফতানি করা উচিত এমন সমস্ত চিহ্ন চিহ্নিত করে DLLEXPORT
।
সম্ভবত, Q_CORE_EXPORT
ম্যাক্রো যা তা করে তা সমাধান করে Q_DECL_IMPORT
বা হয় Q_DECL_EXPORT
।
__declspec
সি ++ ভাষাতে এক্সটেনশন হিসাবে স্বরলিপিটি আবিষ্কার করেছিলেন । আমি বিশ্বাস করি যে জিসিসি এখন এটি সমর্থন করে তবে এটি মূলত মাইক্রোসফ্টের সংকলকগুলির সাথে সামঞ্জস্যতার কারণে। এবং "এমএস-নির্দিষ্ট" কীভাবে "সংকলক নির্দিষ্ট" থেকে আলাদা তা আমি বুঝতে পারি না। মাইক্রোসফ্ট একটি সি ++ সংকলক লিখেছিল এবং প্রচুর লোক এটি ব্যবহার করে। এটি ভিজ্যুয়াল স্টুডিও সহ আসে।
__declspec(dllimport)
একটি স্টোরেজ-ক্লাস স্পেসিফায়ার যা সংকলককে বলে যে কোনও ফাংশন বা অবজেক্ট বা ডেটা টাইপ একটি বাহ্যিক ডিএলএলে সংজ্ঞায়িত।
ফাংশন বা অবজেক্ট বা ডেটা প্রকারটি কোনও ডিএলএল থেকে সংশ্লিষ্ট সাথে রফতানি করা হয় __declspec(dllexport)
।
__declspec(dllexport)
সংযোগকারীকে লিঙ্কারকে অবহিত করতে জানায় যে এই চিহ্নগুলি রফতানি টেবিলের মধ্যে স্থাপন করা প্রয়োজন (.dll সংকলন করার সময়)। .Dll এর সাথে লিঙ্কযুক্ত প্রোগ্রামটি সংকলন করার সময়, __declspec(dllimport)
কম্পাইলারকে একটি চুরি-সম্পর্কিত আপাত নিখুঁত রেজিস্ট্রার-পরোক্ষ পরোক্ষ কল (যা লিঙ্কার আমদানির টেবিলের দিকে ইঙ্গিত করার সংকল্প পূরণ করবে) উত্সাহিত করতে না করে বরং সরাসরি চিপ-সম্পর্কিত পরোক্ষ কল নির্দেশ একটি অনির্ধারিত ফাংশনে (যা এটি নির্দেশকে পরিবর্তন করতে পারে না) উত্পাদন করতে বলে, লিঙ্কারটির আপেক্ষিক ঠিকানা সন্নিবেশ করায় একটি থাঙ্ক এবং তারপরে থাঙ্ক তৈরি করে, যার ভিতরে এটি চুরি-সম্পর্কিত আপাত নিখুঁত রেজিস্টার-পরোক্ষ পরোক্ষ কল আমদানি সারণীতে ফাংশন পয়েন্টারে প্রেরণ করে)। এটি একটি কোড আকার এবং গতি অপ্টিমাইজেশন। এটি আমদানি গ্রন্থাগার .lib যা সংযোগকারীকে জানায় যে কোন চিহ্নগুলি আমদানি করা হবে এবং আমদানি সারণী তৈরি করতে এবং .text বিভাগে কোনও প্রয়োজনীয় থঙ্ক তৈরি করতে গাইড হিসাবে ব্যবহৃত হয়।
https://docs.microsoft.com/en-us/cpp/build/importing-function-calls- using-declspec- dllimport? view = vs- 2019 https://docs.microsoft.com/en-us/cpp / বিল্ড / আমদানি-ডেটা ব্যবহার করে-ডেলস্পেক-ডেলিম্পোর্ট? ভিউ = বনাম -2018 https://stackoverflow.com/a/4490536/7194773
এর অর্থ হ'ল ফাংশনের সংজ্ঞাটি একটি গতিশীল লাইব্রেরিতে রয়েছে। পড়ুন ডকুমেন্টেশন আরো বিস্তারিত জানার এবং উদাহরণ জন্য।