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.
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ą.
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ł.