После создания графического интерфейса для моего личного небольшого приложения я пытаюсь скомпилировать его как статическую библиотеку для использования в другом проекте.GUI создан и выполняет другие задачи с помощью управляемого публичного класса ref, который в настоящее время имеет только 5 функций, но будет добавлен в него.
Это мой заголовочный файл в статической библиотеке, который будет включен вдругой проект (ну, по крайней мере, новый, с только общедоступными функциями, все лишние вещи будут удалены);
#ifndef GUIInterface_H
#define GUIInterface_H
#include
#include "MainForm.h"
using namespace System;
using namespace System::Threading;
public ref class GUIInterface
{
private:
ThreadStart^ GUIThreadDelegate;
Thread^ GUIThread;
void GUIThreadFunction()
{
ANNGUI::Application::EnableVisualStyles();
ANNGUI::Application::Run(gcnew ANNGUI::MainForm());
return;
}
public:
int CreateGUI();
int DestroyGUI();
int GetInputData();
bool CheckNewInput();
int NetworkState();
};
#endif
Это способ доступа к нему из другого проекта (.exe)
#include "main.h"
int main()
{
GUIInterface ^GUI = gcnew(GUIInterface);
GUI->CreateGUI();
return 0;
}
Файл main.h просто содержит определения классов, такие как заголовочный файл, показанный выше, за вычетом личных данных.
Я использую Visual Studio 2010 Express C ++.Оба проекта скомпилированы с ключом / clr.Статическая библиотека установлена как ссылка в проекте .exe.Когда я вместо этого компилирую статическую библиотеку как DLL, программа работает отлично (после того, как я удалил main.h из приложения).Когда она скомпилирована как статическая библиотека, я получаю сообщение об ошибке LNK2020 для каждой из функций, используемых для связи с графическим интерфейсом.
Я связал .exe с параметром / VERBOSE, чтобы увидеть вывод.Компоновщик смотрит точно, где находится .lib несколько раз, но никогда не говорит, что нашел его, даже если он ищет ТОЧНО правильный путь и правильный файл.Кроме того, если это что-то значит, мой .lib работает нормально, но получает это как предупреждение.
.NETFramework,Version=v4.0.AssemblyAttributes.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
Мой вопрос: почему компоновщик ищет в .lib правильное место, но не видит его?прямо перед его лицом?Как я могу исправить это, чтобы я мог использовать свой статический .lib?