লিঙ্ক ইস্যু (VC6)

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

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

LNK2001 লিঙ্কার ত্রুটি আমি সাধারণত আমি একটি ভার্চুয়াল বন্ধ বামে করেছি বা একটি ভার্চুয়াল ফাংশন বাস্তবায়ন ভুলে গেছি মানে। তবে এটি আদর্শ টেমপ্লেট লাইব্রেরির অংশ - এবং এটি একটি শীর্ষচরণ।

কোডটি IOCompletionPort.obj এ সমস্যা হিসাবে তালিকাভুক্ত করা হয় প্রকৃতপক্ষে প্রকৃতপক্ষে std :: string ব্যবহার করে না কিন্তু একটি ক্লাসকে কল করে: Comms :: ব্যতিক্রম std :: string এবং GetLastError বা WSAGetLastError এর মান গ্রহণ করে।

ত্রুটি (<�কোড> GetMessage ) এ উল্লেখিত ফাংশনটি প্রয়োগ করা হয়, তবে এটি একটি ভার্চুয়াল ফাংশন, তাই অন্যান্য ক্লাসগুলি যদি প্রয়োজন হয় তবে এটি ওভাররাইড করতে পারে। যাইহোক মনে হচ্ছে কম্পাইলারটি এনিসি সংস্করণটি তৈরি করেছে, তবে যে সেটিংসটি নিয়ন্ত্রণ করবে তার কোনও বিকল্প আমি খুঁজে পাচ্ছি না। আমি মনে করি যে সমস্যা হতে পারে, কিন্তু যেহেতু গ্রন্থাগারের জন্য বিকল্পগুলির মধ্যে খুব সামান্য আছে তাই নিশ্চিতভাবে জানার জন্য আমার কোন উপায় নেই। তবে কম্পাইলারের বিকল্পগুলিতে _ এমবিসিএস উল্লেখ করার জন্য উভয় প্রকল্প।

--------------------Configuration: TestComms - Win32 Debug-------------------- Linking... Comms.lib(IOCompletionPort.obj) : error LNK2001: unresolved external symbol "public: virtual class std::basic_string,class std::allocator > __thiscall Comms::Exception::GetMessageA(void)const " ([email protected] [email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@XZ) Debug/TestComms.exe : fatal error LNK1120: 1 unresolved externals Error executing link.exe.

TestComms.exe - 2 error(s), 0 warning(s)

কোন পরামর্শ? আমি এই সকালে সবচেয়ে হারিয়ে গেছে এবং খুব বিকালে অধিকাংশই হারাতে চাই না।

0
ro fr hi

5 উত্তর

windows.h এ IOC ফাংশনটির শীর্ষে ঘোষণা করা হয়। একটি অন্তর্ভুক্তি - আমি 7 টি ফাইল দেখানোর জন্য অসুস্থ ছিলাম 1 ফাইল অন্তর্ভুক্ত করতে যাতে আমি এটির নিজস্ব ফাইলটি আবৃত করেছি এবং সেটি নিজেই অন্তর্ভুক্ত করেছি। এর মধ্যে কিছু অতিরিক্ত # ডিফাইন রয়েছে (অর্থাৎ ULONG_PTR) যেহেতু আমাদের প্রধান অ্যাপটি প্ল্যাটফর্ম SDK এর সাথে কম্পাইল হবে না :-(

  1. এটা নিশ্চিত কিছুই জায়গা বাইরে।
  2. আমি এটি করেছি - বিল্ড ডিরেক্টরিগুলি মুছে ফেলা
  3. আমি হার্ড-কোডেড পাথ ব্যবহার করি না।
0
যোগ

@ কার্ট: আমি মনে করি আপনি নিকটতম কাছাকাছি এসেছেন। আমি এই পরীক্ষা না কিন্তু আমি মনে করি আমি আমার মূল প্রশ্নের উত্তর দেওয়া।

GetMessage is a define in Windows.h wrapped in a ifndef block to switch between Ansi (GetMessageA) and Unicode (GetMessageW).

0
যোগ

আপনি কিছু আপনার উচিত না মুছে ফেলার প্রকল্প সেটিংস সঙ্গে চারপাশে futzed না (যেটি যেখানে আমি User32.lib মত বাহ্যিক নির্ভরতা আশা চাই):

সরঞ্জাম পরীক্ষা করুন | বিকল্প | ডিরেক্টরি | লাইব্রেরী (এখানে স্মৃতিশক্তি থেকে যাচ্ছে) এবং নিশ্চিত করুন যে আপনি সাধারণ-সব-বাগান বিভিন্ন লিবিক ডাইরেক্টরি হারিয়েছেন না (আবার, আমার সামনে ভিসি 6 ছাড়া, আমি আপনাদের বলছি না যে তারা কি করছে)

0
যোগ

এটি একটি সাধারণ সমস্যা যা মাইক্রোসফ্ট ANSI বনাম ইউনিকোড API গুলি পরিচালনা করে। যেহেতু তারা ফাংশন নামগুলির 'A' বা 'W' সংস্করণগুলিকে সংশোধন করে ফাংশন নামগুলির জন্য ম্যাক্রোকে সংজ্ঞায়িত করে সব (বা আরো অনেক কিছু) করে থাকে তবে আপনি আপনার নামস্থান / ক্লাস / স্ট্রিপ্ট / enum / ফাংশন যা উইন্ডোজ এপিআই নামের সাথে মিলছে।

Windows.h ম্যাক্রোস অন্যান্য সমস্ত নামপথগুলির উপর রাশিপোট চালায়।

0
যোগ

একটি সম্ভাবনা Win32 ANSI / ইউনিকোড "নাম- mangling" সঙ্গে মিথ্যা, যা GetMessage চিহ্নটি GetMessageA বা GetMessageW এ ) করে। তিনটি সম্ভাবনার আছে:

  1. উইন্ডোজ এইচ লোড করা হয় নি, তাই GetMessage থাকা <�কোড> GetMessage

  2. উইন্ডোজ এইচ ANSI জন্য সেট চিহ্ন সঙ্গে লোড করা হয়, তাই <�কোড> GetMessage </কোড> হয়ে <�কোড> GetMessageA </কোড> </পি>

  3. ইউনিকোডের জন্য সেট করা চিহ্নগুলির সাথে উইন্ডোজ এইচ লোড করা হয়েছে, তাই GetMessage হয়ে যাবে <�কোড> GetMessageW

আপনি দুটি ভিন্ন পরিস্থিতিতে দুটি পৃথক ফাইল সংকলন করেছেন, তাহলে আপনি একটি লিঙ্কার ত্রুটি পাবেন। ত্রুটি বার্তাটি ইঙ্গিত দেয় যে Comms :: ব্যতিক্রম ক্লাস উপরে একটি # 2 উদাহরণ ছিল - সম্ভবত এটা যে কোন জায়গায় ব্যবহৃত হয় যে windows.h লোড করা হয় নি?

অন্য কিছু যা আমি আপনার জায়গায় করতে চাই, ঠিক রুটিন ব্যাপার:

1) নিশ্চিত করুন যে আমার অন্তর্ভুক্ত এবং লাইব্রেরির পাথগুলি এমন কিছু নেই যা আমি আশা করি না।

2) একটি "পরিষ্কার পরিষ্কার করুন" এবং তারপর নিজে যাচাই করুন, অতিরিক্ত বস্তু ফাইলগুলি মুছে ফেলার প্রয়োজন হলে

3) নিশ্চিত করুন যে অন্তর্ভুক্ত বিবৃতিগুলির মধ্যে কোনও হার্ডকোড পাথ নেই যেগুলি মূলত পুনর্নির্মাণের সময় কি ছিল তা বোঝানো হয়নি।

সম্পাদনা করুন: ফর্ম্যাটিংয়ের সাথে লড়াই করা :(

0
যোগ