Сразу скажу - в длл-ках я совершенно не силён, однако в скором времени мне придётся столкнуться с сабжем, в связи с чем следующие вопросы:
1. Можно ли будет скомпилить эту дллку статически? Если да - что для этого нужно?
2. Длл-ка будет выводить окна и взаимодействовать с пользователем. Можно ли сделать чтобы это взаимодействие шло напрямую, т.е. минуя вызывающую программу?.
3. Я создал тестовый проект QtDll, чтобы проверить, можно ли вообще использовать Qt в "обычных" длл-ках, создал второй проект, включил в него QtDll.h, в либы добавил QtDll.lib, попробовал потестить и получил ругань:
Linking...
QtDllTest.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl QtDll::Test(void)" (__imp_?Test@QtDll@@YAXXZ) referenced in function "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z)
C:\Projects\QtDllTest\QtDllTest\Debug\QtDllTest.exe : fatal error LNK1120: 1 unresolved externals
QtDll.h
#ifdef QTDLL_EXPORTS
#define QTDLL_API __declspec(dllexport)
#else
#define QTDLL_API __declspec(dllimport)
#endif
// This class is exported from the QtDll.dll
class QTDLL_API CQtDll {
public:
CQtDll(void);
// TODO: add your methods here.
};
extern QTDLL_API void Test();
QtDll.cpp
// QtDll.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "QtDll.h"
#include <QWidget>
#ifdef _MANAGED
#pragma managed(push, off)
#endif
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
QTDLL_API void Test()
{
}
Что я не так делаю?
Так, с 3-им пунктом разобрался.. Просто забыл добавить h-файл dll-ки в проект
.
p.s.
Кстати, может у кого-нибудь есть пример на эту тему?