سؤال

لدي حل يتكون من 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"

نصائح أخرى

هذا أمر طبيعي إذا تم/يتم تصدير وظيفة واحدة أو أكثر من قابلة للتنفيذ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top