Внешняя точка входа C ++ (lib или dll) - PullRequest
0 голосов
/ 19 августа 2011

Интересно, можно ли создать точку входа (main или winmain) в какую-нибудь библиотеку? Я пытаюсь написать код оконного менеджера, и я хотел бы, чтобы основная функция была в библиотеке с файлами приложения, просто определяющими несколько внешних функций, вызываемых winmain (таких как extern render () или extern refresh ())

Я пытался сделать это самостоятельно, но получаю ошибку, что точка входа не определена.

Ответы [ 2 ]

0 голосов
/ 11 мая 2013

Я просто провел последние пару дней, пытаясь выяснить это для себя, и мне повезло.

примечание Я пробовал это только для статических библиотек (.lib)

С файлами .lib дело в том, что они используются и подключаются к вашему проекту, только если вы вызываете функцию из библиотеки.Теперь проблема с минимальным проектом состоит в том, что у вас будет только основная функция.Но это не вызывается вашим проектом, так как это связано с ним тогда?

Мое решение, может быть, не так уж и элегантно, но оно работает для меня: создайте LibConnection.h, где вы включаете lib.hи вызвать одну фиктивную функцию из вашей библиотеки lib.cpp.Плохая часть, на мой взгляд, заключается в том, что вы должны включить ваш lib.h и ваш Connectionlib.h в файлы вашего проекта.

вот так:

//Lib.h
void ConnectionFunction();

//Lib.cpp
int main(int argc, char* argv[])
{
    //do some stuff
}

//This function doesn't do anything but it is important 
//that you define it in your lib.h and declare it in your lib.cpp
void ConnectionFunction()
{
}

теперь у вас естьбазовая библиотека и нужно создать файл подключения, например:

//LibConnection.h
#include "Lib.h"
//now we call the connectionfunction
//remember non of this get really called but it makes possible connecting with your
//almost empty library
void Dummy()
{
     ConnectionFunction();
}

, а затем в пустом проекте:

//testapp.cpp
#include "LibConnection.h"
//remember to include the lib.h and the libconnection.h into your project files

void Foo()
{
    //this function doesn't get called but your project is running!
}

Надеюсь, это поможет:)

0 голосов
/ 19 августа 2011

Вы можете указать экспорт из вашей DLL, используя файл определения модуля в вашем проекте.

...