Я начал изучать библиотеки DLL с неявными ссылками. Я не совсем понимаю, как это работает. Пожалуйста, поправьте меня, где я не прав.
Мне не удалось скомпилировать следующий код (3 модуля):
MyLib.h
#ifdef MYLIBAPI
#else
#define MYLIBAPI extern "C" __declspec(dllimport)
#endif
MYLIBAPI int g_nResult;
MYLIBAPI int Add(int nLeft, int nRight);
Насколько я понимаю, это заголовок DLL. #define MYLIBAPI extern "C" __declspec(dllimport)
означает, что здесь мы собираемся объявить некоторые функции / переменные, которые будут описаны в выделенном файле .cpp и будут содержаться в DLL.
MyLibFile1.cpp
#include <windows.h>
#define MYLIBAPI extern "C" __declspec(dllexport)
#include "MyLib.h"
int g_nResult;
int Add(int nLeft, int nRight) {
g_nResult = nLeft + nRight;
return(g_nResult);
}
Итак, это, очевидно, файл, в котором реализованы наши функции. Это часть DLL, верно?
MyExeFile1.cpp
#include <windows.h>
#include <strsafe.h>
#include <stdlib.h>
#include "MyLib.h"
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) {
int nLeft = 10, nRight = 25;
TCHAR sz[100];
StringCchPrintf(sz, _countof(sz), TEXT("%d + %d = %d"),
nLeft, nRight, Add(nLeft, nRight));
MessageBox(NULL, sz, TEXT("Calculation"), MB_OK);
StringCchPrintf(sz, _countof(sz),
TEXT("The result from the last Add is: %d"), g_nResult);
MessageBox(NULL, sz, TEXT("Last Result"), MB_OK);
return(0);
}
Итак, это исполняемый файл, в котором мы используем функции из библиотеки.
Все это не работает. Я попытался поместить все это в один каталог и скомпилировать сразу. Я попытался сначала скомпилировать DLL из первых двух модулей (успешно), а затем скомпилировать исполняемый файл (изменив путь к файлу заголовка). Однако это привело к 2 ошибкам оба раза:
ошибка LNK2019: неразрешенный внешний символ _WinMain @ 16, указанный в функции ___ tmainCRTStartup
\ Visual Studio 2008 \ Projects \ MyExeFile1 \ Debug \ MyExeFile1.exe: фатальная ошибка LNK1120: 1 неразрешенный внешний код
Как правильно это сделать - что я должен изменить в коде и как мне скомпилировать код (я использую VS2008)?
Спасибо.