لماذا يقوم إنشاء مشروع C ++.
-
26-09-2019 - |
سؤال
لدي حل يتكون من 3 مشاريع. إحداها مكتبة ثابتة ، واثنان من ملفات .exe تعتمد على وحدة التحكم التي تعتمد على هذه المكتبة وتربطها. يبدو أن إعداداتهم متطابقة. أبني واحد منهم:
1> ------ build بدأ: المشروع: Masksample ، التكوين: Debug Win32 -------
1> التجميع ...
1> stdafx.cpp
1> التجميع ...
1> Masksample.cpp
1> تجميع البيان للموارد ...
1> الارتباط ...
1> الرابط: c: user dareksz praca cci debug masksample.exe لم يتم العثور عليه أو عدم تصميمه بواسطة الرابط الإضافي الأخير ؛ أداء رابط كامل
1> التضمين البيان ...
1> Masksample - 0 خطأ (S) ، 0 تحذير (S)
========== Build: 1 نجح ، 0 فشل ، 1 محدث ، 0 تخطي ===========
ثم أذهب إلى بناء الآخر:
1> ------ build بدأ: المشروع: calibsample ، التكوين: Debug Win32 -------
1> التجميع ...
1> stdafx.cpp
1> التجميع ...
1> calibsample.cpp
1> تجميع البيان للموارد ...
1> الارتباط ...
1> الرابط: c: user dareksz praca cci debug calibsample.exe غير موجود أو غير مصمم بواسطة الرابط الإضافي الأخير ؛ أداء رابط كامل
1> إنشاء مكتبة C: Users dareksz praca cci debug calibsample.lib and object c: user
1> التضمين البيان ...
1> calibsample - 0 خطأ (s) ، 0 تحذير (s)
========== Build: 1 نجح ، 0 فشل ، 1 محدث ، 0 تخطي ===========
لماذا يقوم الرابط بإنشاء ملفات .lib و .exp هذه المرة؟ هل هناك بعض الخيارات لتشغيل هذا وإيقافه الذي قمت بتنشيطه دون معرفة ذلك؟
المحلول
لقد تأخرت قليلاً ، لكن ربما يمكن لشخص آخر أن يجد هذا التلميح.
راجع للشغل أنا لست معلمًا C ++ ...
في حلي لدي 3 مشاريع. أحدهما مشروع DLL ، والآخران هما مشروعان للتطبيقات Win32 يشيران إلى مشروع DLL.
عادة ، مع إنشاء DLL الخاص بك ، لديك أيضًا ملفات أخرى تم إنشاؤها (.exp ، .lib) أيضًا لمشاريع DLL. يمكن أن يحدث هذا عند تضمين ملف .H لمشروع DLL ، في مشروع التطبيق ، والذي يحتوي على فئة مميزة بـ __declspec (Dllexport).
لتجنب الرابط ، أعتقد أن تحاول تضمين بعض ملفات .H "للتصدير" ، استخدم تعبيرًا مشروطًا لتحديد ماكرو _declspec.
مثال:
#if defined(_DO_NOT_EXPORT)
#define DllExport
#else
#define DllExport __declspec(dllexport)
#endif
حسنًا ، لنفترض أن لديك myclass.h في مشروع DLL الخاص بك.
في ملف .H الخاص بك يمكن أن يكون لديك الآن:
class DllExport MyClass {
...
}
عندما تريد تضمين هذا الملف .H في مشروع غير DLL ، يجب عليك ببساطة تحديد حالة _do_not_export
#define _DO_NOT_EXPORT
#include "MyClass.h"
نصائح أخرى
هذا أمر طبيعي إذا تم/يتم تصدير وظيفة واحدة أو أكثر من قابلة للتنفيذ.