ডিএলএল লোড করতে অক্ষম (মডিউলটি পাওয়া যায়নি HRESULT: 0x8007007E)


113

আমার .NET 4.0 অ্যাপ্লিকেশনটিতে আমার পরিচালনা করা সি ++ এপিআই কোড সহ dll গ্রন্থাগার রয়েছে। তবে আমি আমার ডিএল লোড করার চেষ্টা করি এমন প্রতিটি পদ্ধতিতে আমি একটি ত্রুটি পাই:

DLL 'MyOwn.dll' লোড করতে অক্ষম: নির্দিষ্ট মডিউলটি পাওয়া যায়নি। (এইচআরসিলেট থেকে ব্যতিক্রম: 0x8007007E)

আমি ইন্টারনেটে যে বিচ্ছিন্ন সমাধান পেয়েছি তা পড়েছি এবং চেষ্টা করেছি। কিছুই কাজ করে না ..

আমি নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করার চেষ্টা করেছি:

[DllImport("MyOwn.dll",  CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs((UnmanagedType.I4))]
public static extern Int32 MyProIni(string DBname, string DBuser_pass,
    string WorkDirectory, ref StringBuilder ErrorMessage);

যখন আমি এই নিবন্ধটি অনুসরণ করার চেষ্টা করেছি এবং যখন আমি এই উদাহরণটি চালিত করি (ডাউনলোড কোড থেকে) এটি কোনও সমস্যা ছাড়াই চলে (ব্যবহৃত ডেলটি বিন / ডিবাগ ফোল্ডারে রয়েছে)

আমি আমার dll অনুলিপি করেছি (সমস্ত ফাইলের সাথে এটি আমার বিন ফোল্ডারের উপর নির্ভর করে)।

আমিও এই পদ্ধতির চেষ্টা করেছিলাম কিন্তু একই ত্রুটি পেয়েছি:

[DllImportAttribute(MyOwnLibDllPath, EntryPoint="TMproIni")]
[return: MarshalAs(UnmanagedType.I4)]
public static extern  int MyproIni(string DBname, string DBuser_pass, 
    string WorkDirectory, ref StringBuilder ErrorMessage);

কোনও পরামর্শ?

উত্তর:


90

উইন্ডোজটিতে আমি যা মনে করি তা থেকে একটি ডেলির অনুসন্ধান ক্রমটি হ'ল:

  1. বর্তমান ডিরেক্টরি
  2. সিস্টেম ফোল্ডার, C:\windows\system32 or c:\windows\SysWOW64(-৪-বিট বাক্সে 32-বিট প্রক্রিয়ার জন্য)।
  3. Pathপরিবেশের পরিবর্তনশীল থেকে পড়া

এছাড়াও আমি ডিএলএল এর নির্ভরতা যাচাই করেছি, ভিজ্যুয়াল স্টুডিওর সাথে সরবরাহিত নির্ভরতা ওয়াকার আপনাকে এখানে সহায়তা করতে পারে, এটি বিনামূল্যে ডাউনলোডও করা যেতে পারে: http ://www.d dependencywalker.com


4
কিছু নির্ভরতার অনুপস্থিত (ওরাকল এবং কিছু আইই থেকে ডেল) পাওয়া গেছে। ওরাকল ইনস্টল করা দরকার যেহেতু আমার dll এর উপর নির্ভর করে..তখন আমি জানতে পারি :) নির্ভরতাওয়ালারের সাথে সমস্যাটি খুঁজে পেয়েছি;)
ইনজিমার অ্যান্ড্রেসন

কোনও উদ্বেগ নেই, এটি আমার জন্য কয়েক ঘন্টা মাথা স্ক্র্যাচ করে বাঁচিয়েছে, দুর্দান্ত ছোট সরঞ্জাম! :-)
ডিসপ্লে 101

1
নির্ভরতাওয়ালারের পরামর্শ দেওয়ার জন্য কীথ হালিগানকে +1 করুন এটি আমাকে বলেছিল যে সমস্ত নির্ভরতার একই সিপিইউ টাইপ ছিল না (x86 / x64)। আমি আমার অ্যাপ্লিকেশনটির বিন ফোল্ডারে একই সিপিইউ টাইপযুক্ত সমস্ত ফাইল অনুলিপি করেছি এবং এটি সমস্যার সমাধান করেছে।
DiligentKarma

6
আমার সিস্টেমে যে সমস্ত ডিএল আমি খুঁজে পেতে পারি তার ডিপেন্ডেন্সিওয়ালার দাবি করে যে বিভিন্ন সিপিইউ ধরনের - এমনকি System.Web.Mvc.dll এর সাথে একটি ত্রুটি আছে। এখানে কিছু ধরণের ভ্রান্ত বিপদাশঙ্কা রয়েছে।
পান্ডাওয়ুড

2
আমার ক্ষেত্রে সমস্যাটি ডিবাগের জন্য সংকলিত সি ++ ডিএলএল লোড করার চেষ্টা করছে। এর জন্য সি ++ ডিবাগ রানটাইম প্রয়োজন, যার অর্থ আপনার ভিজ্যুয়াল স্টুডিও ইনস্টল করতে হবে। বা রিলিজের জন্য ডিএলএল পুনরায় কম্পাইল করুন এবং সি ++ রানটাইম বিতরণযোগ্য ইনস্টল করুন।
রেনিপেট

42

প্রয়োজনীয় ডিএলএল নির্ভরতা জানতে আপনি ডাম্পবিন সরঞ্জামটি ব্যবহার করতে পারেন:

dumpbin /DEPENDENTS my.dll

এটি আপনাকে জানিয়ে দেবে যে কোন ডিএলএল আপনার ডিএলএল লোড করা দরকার। বিশেষত এমএসভিসিআর * .ডিএল দেখুন। সঠিক ভিজ্যুয়াল সি ++ পুনরায় বিতরণযোগ্য ইনস্টল না করা অবস্থায় আমি আপনার ত্রুটি কোডটি দেখেছি।

আপনি মাইক্রোসফ্ট ওয়েবসাইট থেকে "ভিজ্যুয়াল সি ++ পুনরায় বিতরণযোগ্য প্যাকেজগুলির জন্য ভিজ্যুয়াল স্টুডিও 2013" পেতে পারেন। এটি সি: \ উইন্ডোজ \ system32 \ MSVCR120.dll ইনস্টল করে

ফাইলের নামে, 120 = 12.0 = ভিজ্যুয়াল স্টুডিও 2013।

আপনার ডিএলএল এর লক্ষ্য প্ল্যাটফর্মের জন্য সঠিক ভিজ্যুয়াল স্টুডিও সংস্করণ (10.0 = ভিএস 10, 11 = ভিএস 2012, 12.0 = ভিএস 2013 ...) সঠিক আর্কিটেকচার (x64 বা x86) রয়েছে সে সম্পর্কে সতর্ক থাকুন এবং আপনার চারপাশে সতর্কতা অবলম্বন করা উচিত ডিবাগ বিল্ডস একটি ডিএলএল এর ডিবাগ বিল্ডিং এমএসভিসিআর 120 ডি.ডিলের উপর নির্ভর করে যা গ্রন্থাগারের একটি ডিবাগ সংস্করণ, যা ভিজ্যুয়াল স্টুডিওতে ইনস্টল করা হয়েছে তবে পুনরায় বিতরণযোগ্য প্যাকেজ দ্বারা নয়।


5
ভিএস সি ++ পুনরায় বিতরণযোগ্যগুলি যুক্ত করা আমার পক্ষে ছিল! প্রয়োজন v10.0 (2010)। অনেক ধন্যবাদ !!!
থিয়াগো সিলভা

Ist৪-বিট বা -২-বিট সংস্করণগুলি পুনরায় বিতরণযোগ্যগুলির প্রয়োজন কিনা তা বলার কোনও উপায় আছে কি?
বিভিবি

1
ডাম্পবিন / সমস্ত আপনাকে জানিয়ে দেবে যে my.dll x64 এর x86
অ্যান্টনি

1
যারা এখনও এই সমস্যায় ভুগছেন তাদের জন্য, আপনি যদি debugবাইনারি ব্যবহার করেন তবে সি ++ রানটাইম পুনরায় বিতরণযোগ্য সংস্করণটি আপনি যেখানে তৈরি করেছেন ঠিক তার মতোই হওয়া দরকার।
skyline75489

@ skyline75489 এর মন্তব্য আমার জন্য দিনটি বাঁচিয়েছে। সি ++ গ্রন্থাগারটি আমার মেশিনে ঠিকঠাক কাজ করেছে তবে এমএসভিসিআর-এর ডিবাগ সংস্করণটির সাথে ভিএস-এর সংযোগের কারণে অন্য কোথাও লোড করতে ব্যর্থ হয়েছিল।
গুপ্তচর

14

এটি একটি 'ক্লডজ' তবে আপনি কমপক্ষে বিচক্ষণতার জন্য এটি ব্যবহার করতে পারেন: আপনার কোডের ডিএলএল-এর পথটি হার্ড-কোডিংয়ের চেষ্টা করুন

[DllImport(@"C:\\mycompany\\MyDLL.dll")]

বলেছে যে; আমার ক্ষেত্রে dumpbin /DEPENDENTS@ অ্যান্টনি-হায়ওয়ার্ডের পরামর্শ অনুসারে চলমান , এবং আমার ওয়ার্কিং ডিরেক্টরিতে তালিকাভুক্ত ডিএলএলগুলির 32-বিট সংস্করণ অনুলিপি করা আমার জন্য এই সমস্যার সমাধান করেছে।

বার্তাটি কিছুটা বিভ্রান্তিকর, কারণ এটি "আমার" dll নয় যা লোড করা যায় না - এটি নির্ভরতা


12

ডিএলএলটি বিন ফোল্ডারে থাকতে হবে।

ভিজ্যুয়াল স্টুডিওতে, আমি আমার প্রকল্পে dll যুক্ত করি (রেফারেন্সগুলিতে নয়, তবে "বিদ্যমান ফাইল যুক্ত করুন")। তারপরে dll এর "" অনুলিপি ডিরেক্টরিতে অনুলিপি করুন "সম্পত্তি সেট করুন" নতুন যদি অনুলিপি করুন "।


11

Dll এর পুরো পথে প্রবেশের চেষ্টা করুন। যদি এটি কাজ না করে তবে ডেলকে সিস্টেম 32 ফোল্ডারে কপি করার চেষ্টা করুন।


3
সিস্টেম 32 ফোল্ডারে সমস্ত নির্ভরতা থাকা এবং আমার dll অন্য কোথাও রাখা কি ঠিক?
ইঙ্গিমার অ্যান্ড্রেসন

যেমন দ্বারা নির্দিষ্ট নির্ভরতা এছাড়াও প্রতি জানালা DLL পথ অনুসন্ধান হিসাবে অনুসন্ধান করা হবে stackoverflow.com/a/9003290/4434329

4

আপনার নিজের dll এর সমস্ত নির্ভরতা dll এর নিকটে বা তার মধ্যে উপস্থিত রয়েছে তা নিশ্চিত করুন System32


4

একটি খুব মজাদার জিনিস আছে (এবং এর প্রযুক্তিগত প্রাসঙ্গিকতা রয়েছে) যা আপনার সময়গুলি এখানে ভাগ করে নেওয়ার চিন্তা করে নষ্ট করতে পারে -

আমি একটি কনসোল অ্যাপ্লিকেশন প্রকল্প ConsoleApplication1এবং একটি শ্রেণিকাল গ্রন্থাগার প্রকল্প তৈরি করেছিClassLibrary1

সমস্ত কোড যা পি তৈরি করছিল তা উপস্থিত ছিল ClassLibrary1.dll। সুতরাং ভিজ্যুয়াল স্টুডিও থেকে অ্যাপ্লিকেশনটি ডিবাগ করার আগে আমি কেবল সি ++ পরিচালনা না করে অ্যাসেম্বলি ( myUnmanagedFunctions.dll) এর \bin\debug\ডিরেক্টরিতে অনুলিপি করেছিClassLibrary1 প্রকল্পের যাতে এটি সিএলআর দ্বারা রান-টাইমে লোড করা যায়।

আমি পেয়েছিলাম

ডিএলএল লোড করতে অক্ষম

ঘন্টা জন্য ত্রুটি। পরে আমি বুঝতে পেরেছি যে লোড করা হ'ল এইরকম পরিচালিত সমস্ত অ্যাসেমব্লিকে \bin\debugস্টার্ট-আপ প্রকল্পের ডিরেক্টরিতে অনুলিপি করা দরকারConsoleApplication1 যা সাধারণত উইন ফর্ম, কনসোল বা ওয়েব অ্যাপ্লিকেশন।

সুতরাং দয়া Current Directoryকরে গৃহীত উত্তরের মধ্যে সতর্কতা অবলম্বন করুন meansCurrent Directory যেখানে আপনি আবেদন প্রক্রিয়া শুরু করছেন সেখান থেকে মূল নির্বাহের মূল সম্পর্কে । একটি সুস্পষ্ট জিনিস মনে হচ্ছে তবে এটি কখনও কখনও নাও হতে পারে।

পাঠ শিখেছি - এটি সর্বদা নিরবচ্ছিন্ন ডলগুলি স্টার্ট-আপ এক্সিকিউটেবলের মতো একই ডিরেক্টরিতে এটি সন্ধানের জন্য নিশ্চিত করুন।


এটি আমার জন্যও স্থির জিনিস। মূলত প্রকল্পটি যেগুলি তাদের ব্যবহার করছে তার পরিবর্তে মূল প্রকল্পে ডিএলএল স্থাপন করতে এক ধরণের অদ্ভুত মনে হচ্ছে ...
শান দুগগান

@ সানডুগান এটি কারণ এটি একটি "ডায়নামিক লিঙ্কিং লাইব্রেরি" যার অর্থ এটি সংযোগ সময় ব্যবহৃত স্থির লাইব্রেরির বিপরীতে রান সময়ে ব্যবহৃত (লোড) হয়।
m4l490n

আমি dll bin\Debugএবং obj\Debugডিরেক্টরিগুলির মধ্যে যোগ করার চেষ্টা করেছি এবং আমি "ডিএলএল লোড করতে অক্ষম" পেয়ে
যাচ্ছি

3

ফিউশন লগিং চালু করুন, এটি কীভাবে করা যায় সে সম্পর্কে প্রচুর পরামর্শের জন্য এই প্রশ্নটি দেখুন । মিশ্র-মোড অ্যাপ্লিকেশন লোডিং সমস্যাগুলি ডিবাগ করা সঠিক রয়্যাল ব্যথা হতে পারে। ফিউশন লগিং একটি বড় সহায়তা হতে পারে।


2

নিশ্চিত হয়ে নিন যে আপনি বিল্ড প্ল্যাটফর্ম টার্গেটটি x86 বা x64 এ সেট করেছেন যাতে এটি আপনার ডিএলএলের সাথে সামঞ্জস্যপূর্ণ - যা 32 বিট প্ল্যাটফর্মের জন্য সংকলিত হতে পারে।


2

যদি ডিএলএল এবং। নেট প্রকল্পগুলি একই সমাধানে থাকে এবং আপনি প্রতিটি সময় উভয়ই সংকলন করতে এবং চালাতে চান তবে আপনি নেট প্রকল্পের বৈশিষ্ট্যগুলিতে ডান ক্লিক করতে পারেন, ইভেন্টগুলি তৈরি করুন, তারপরে পোস্ট-বিল্ড ইভেন্টে নীচের মতো কিছু যুক্ত করুন কমান্ড লাইন:

copy $(SolutionDir)Debug\MyOwn.dll .

এটি মূলত একটি ডস লাইন এবং আপনার ডিএলএলটি কোথায় নির্মিত হচ্ছে তার উপর ভিত্তি করে আপনি টুইট করতে পারেন।


2

আমি পিসি পরীক্ষার জন্য আমার অ্যাপ্লিকেশন স্থাপন করার সময় আমার একই সমস্যা ছিল। সমস্যাটি ছিল পিসির ডেভলপমেন্ট msvcp110d.dllএবং ছিলmsvcr110d.dll কিন্তু পরীক্ষা পিসি।

আমি ইনস্টলডশিল্ডে "ভিজ্যুয়াল স্টুডিও সি ++ 11.0 ডিবাগসিআরটি (x86)" মার্জ মডিউল যুক্ত করেছি এবং এটি কাজ করেছে। আশা করি এটি অন্য কারও জন্য সহায়ক হবে।


2

আমার ক্ষেত্রে একটি নিয়ন্ত্রণহীন dll অন্যটির উপর নির্ভর করে যা অনুপস্থিত ছিল। সেক্ষেত্রে ত্রুটিটি অনুপস্থিত একটিটির পরিবর্তে বিদ্যমান ডিএলকে নির্দেশ করবে যা সত্যই বিভ্রান্ত হতে পারে।

আমার ক্ষেত্রে ঠিক তা-ই হয়েছিল। আশাকরি এটি কাউকে সাহায্য করবে।


1

আমি মনে করি আপনার পরিচালিত লাইব্রেরির একটি ম্যানিফেস্টের প্রয়োজন needs এটি কীভাবে আপনার বাইনারি যুক্ত করবেন তা
এখানে । এবং এখানে কেন।

সংক্ষেপে, বেশ কয়েকটি পুনরায় বিতরণযোগ্য গ্রন্থাগার সংস্করণ আপনার বাক্সে ইনস্টল করা যেতে পারে তবে তার মধ্যে কেবল একটিরই আপনার অ্যাপ্লিকেশনটিকে সন্তুষ্ট করা উচিত এবং এটি ডিফল্ট নাও হতে পারে, তাই আপনাকে প্রকাশিত লাইব্রেরির প্রয়োজনীয় সংস্করণটি সিস্টেমকে জানাতে হবে, এজন্যই ম্যানিফেস্ট।


1

সেটআপ : 32-বিট উইন্ডোজ 7

প্রসঙ্গ : পূর্বোক্ত সমস্যার কারণে আমি একটি PCI-GPIB ড্রাইভার ইনস্টল করেছিলাম যার মাধ্যমে আমি যোগাযোগ করতে পারিনি unable

সংক্ষিপ্ত উত্তর : ড্রাইভারটি পুনরায় ইনস্টল করুন।

দীর্ঘ উত্তর : আমি নির্ভরতা ওয়াকারও ব্যবহার করেছিলাম , যা বেশিরভাগ অনুপস্থিত নির্ভরতা মডিউল সনাক্ত করে। তাত্ক্ষণিকভাবে, আমি ভেবেছিলাম যে এটি অবশ্যই একটি বোতলের ড্রাইভার ইনস্টলেশন ছিল। আমি প্রতিটি হারিয়ে যাওয়া ফাইল চেক এবং পুনরুদ্ধার করতে চাই না।

প্রোগ্রাম এবং কন্ট্রোল প্যানেলের বৈশিষ্ট্যগুলির অধীনে আমি আনইনস্টলারটি খুঁজে পেতে অক্ষম হলাম এটি খারাপ ইনস্টলেশনের আর একটি সূচক। ড্রাইভার পুনরায় ইনস্টলেশন করার জন্য আমাকে কয়েক * .dll \ system32 এবং রেজিস্ট্রি কী ম্যানুয়ালি মুছে ফেলতে হয়েছিল।

সমস্যা স্থির।

অপ্রত্যাশিত অংশটি হ'ল সমস্ত নির্ভরতা মডিউলগুলি সমাধান করা হয়নি। তবুও, * .dll আগ্রহের বিষয়টি এখন উল্লেখ করা যেতে পারে।


1

আমি একই সমস্যাটি দেখতে পেয়েছি, আমার ক্ষেত্রে আমার কাছে দুটি 32 বিট পিসি ছিল। .NET4.5 ইনস্টল করা একটি এবং অন্যটি তাজা পিসি।

আমার 32-বিট সিপিপি ডিএল (রিলিজ মোড বিল্ড)। নেট ইনস্টল পিসি দিয়ে ভাল কাজ করছে তবে তাজা পিসির সাথে নয় যেখানে আমি নীচের ত্রুটি পেয়েছি

ডিএলএল 'মুদ্রকসেটটিংস.ডিল' লোড করতে অক্ষম: নির্দিষ্ট মডিউলটি পাওয়া যায়নি। (এইচআরসিলেট থেকে ব্যতিক্রম: 0x8007007E)

পরিশেষে,

আমি সবেমাত্র আমার প্রকল্পটি ডিবাগ মোড কনফিগারেশনে তৈরি করেছি এবং আমার সিপিপি dll ঠিকঠাক কাজ করছিল।


0

সি # এনভায়রনমেন্টে নিয়ন্ত্রণহীন সি / সি ++ ডিএল ফাইল ব্যবহার করার সময়ও একই সমস্যার মুখোমুখি হয়েছিল।

1. 32 ডিবি বা 64 বিবিপি সিপিইউ সহ ডেল এর সামঞ্জস্যতা পরীক্ষা করা হয়েছে।

2.DLL .bin ফোল্ডার, system32 / sysWOW64, বা প্রদত্ত পাথের সঠিক পথগুলি পরীক্ষা করে দেখুন।

৩. পিডিবি (প্রোগ্রাম ডাটাবেস) ফাইলগুলি অনুপস্থিত রয়েছে কিনা তা পরীক্ষা করা হয়েছে। এই ভিডিওটি আপনি পিডিবি ফাইল সম্পর্কে সেরা undestand ANS দেয়।

Bit৪ বিট সিস্টেমে 32-বিট সি / সি ++ বাইনারি কোড চলাকালীন প্ল্যাটফর্মের বেমানানতার কারণে এটি উঠতে পারে। আপনি এটি বিল্ড> কনফিগারেশন পরিচালক থেকে পরিবর্তন করতে পারেন।


0

আমি যখন সি ++ ডেল ইন নেট ফ্রেমওয়ার্ক +4 আমদানি করি তখন আমি একই সমস্যার মুখোমুখি হয়েছি, আমি প্রকল্প-> বৈশিষ্ট্যগুলি> বিল্ড-> 32-বিট পছন্দ করি এবং এটি আমার জন্য সমাধান হয়ে যায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.