Linkowanie biblioteki DLL w C++

Stworzyłem w Asemblerze kod pewnej biblioteki DLL - DLLSkeleton, która dostarcza pewną funkcję - TestFunction. Stworzyłem dodatkowo pliki DLLSkeleton.def. Dokonałem kompilacji biblioteki programem masm32 tak, że mam gotowe pliki: DLLSkeleton.dll, DLLSKeleton.lib, DLLSkeleton.exp.

Biblioteka działa poprawnie, ponieważ potrafię wywołać funkcję TestFunction korzystając z innego programu napisanego w Asemblerze. Nie doszukałem się jednak jak gotową bibliotekę DLL wkompilować do programu napisanego w C++ i jak dokonać wywołania funkcji TestFunction z poziomu kodu napisanego w C++. Używam MS Visual C++ 2008 Express Edition, ale interesują mnie wskazówki dotyczące linkowania biblioteki DLL do programu C++ dla jakiegokolwiek środowiska programistycznego, a ja sobie to przełożę na Visual C++.

Musisz mieć plik nagłówkowy z deklaracją funkcji i .lib dla biblioteki(jego już masz). Jeśli nie masz nagłówka/nie wiesz jak go stworzyć(ja nie mam pojęcia jak to zrobić poprawnie dla biblioteki napisanej asemblerem) to załaduj DLL za pomocą LoadLibrary i pobierz adres funkcji za pomocą GetProcAddress.

Bibliotekę potrafię załadować:

HMODULE g_hDLL = LoadLibrary(NAZWA_PLIKU_DLL);

LoadLibrary zwraca adres funkcji.

LoadLibrary(NAZWA_PLIKU_DLL)

Oczywiście mogę go zapamiętać jako liczbę typu int, ale w takim razie jak wywołać funkcję? Może lepiej zrzutować to na wskaźnik do funkcji, jednak nie wiem jak zadeklarować taką zmienną wskaźnikową.

HMODULE dll = LoadLibrary("..."); //Ładujemy

FARPROC proc = GetProcAddress(dll, "TestFunction"); //Pobieramy wskaźnik na funkcję

typedef void (*TestFunc)();

TestFunc TestFunction = (TestFunc)proc; //Nasza funkcja

TestFunction(); //Wywołujemy

Mogłem zrobić gdzieś błąd - pisane z głowy.

EDIT: należy jeszcze pamiętać o calling convention, ale pewnie o tym wiesz.

Faktycznie takie podejście rozwiązuje problem. Jako, że funkcja ma coś rysować w oknie to w moim przypadku typ wygląda tak:

typedef int (__cdecl *TestFunc)(HDC);

Dzięki za odpowiedź.

Trzeba jednak pamiętać, żeby bibliotekę dll dodać do katalogu z plikiem wykonywalnym, ewentualnie dodać odpowiedni wpis do Makefile’a żeby sam za nas to robił.