Ostatnio zabrałem się za tworzenie bibliotek dll, niestety nie znalazłem niesamowicie dobrych źródeł do ich nauki w internecie (przy okazji jeśli ktoś ma to miło by było jakby podał). Natrafiłem na taki problem którego szczególnie nie rozumiem. Biblioteka jest stworzona ale działa tylko w połowie, to znaczy działają mi na niej tylko funkcje typu int, zmienne nie są ładowane wcale. to jest moja biblioteka:
plik .cpp:
#define Dll_EXPORTS
#include "Dll.h"
#include <iostream>
#include <stdexcept>
using namespace std;
int Add(int a, int b)
{
cout<<"Funkcja Add dziala poprawnie"<<endl;
return a+b;
}
void test()
{
cout<<"Funkcja Test działa poprawnie";
}
plik .h:
#ifndef _DLL_H_
#define _DLL_H_
#include <iostream>
#ifdef Dll_EXPORTS
#define DllAPP __declspec(dllexport)
#else
#define DllAPP __declspec(dllimport)
#endif
extern "C"
{
int DllAPP Add(int a, int b);
int x=5;
void test();
}
#endif /* _DLL_H_ */
i fragment aplikacji która korzysta z biblioteki:
typedef int (*Funkcja)(int, int);
typedef void (*Testowa)();
int X;
Testowa testowa;
Funkcja funkcja;
HINSTANCE hInstLib = LoadLibrary("Lib/Library.dll");
if(hInstLib!=NULL)
{
X = (int )GetProcAddress(hInstLib,"x");
if(X!=0) cout<<X<<endl; //tutaj nie znajduje zmiennej
else cout<<"Zmienna x nie istnieje"<<endl;
funkcja = (Funkcja)GetProcAddress(hInstLib,"Add");
if(funkcja!=NULL) cout<<funkcja(2,2)<<endl;
else cout<<"funkcja Add nie dziala!"<<endl;
testowa = (Testowa)GetProcAddress(hInstLib,"test");
if(testowa!=NULL) testowa(); //tutaj nie znajduje funkcji
else {
cout<<"funkcja test nie dziala!";
}
FreeLibrary(hInstLib);
} else cout<<"Nie zaladowano biblioteki!";
Z tego co wyczytałem w internecie to powinno to w zupełności wystarczyć żeby wszystko działało odpowiednio.