Ładowanie funkcji z argumentami

Ładowanie funkcji z argumentami
XI
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

Jak ładować funkcje z argumentami z biblioteki dll do jednej kalsy np:

Kopiuj
using namespace std;
public class DllLoader
{
String name;
 public DllLoader(String x)
 {
 name = x;
 }
HINSTANCE f = LoadLibray(name);
//funkcja jakaś = jakaś funkcja z dll (i jakieś jej parametry) ;
};
DllLoader dll1 = new DllLoader("x.dll");
dll1.ta_funkcja(jej argumenty);
edytowany 1x, ostatnio: Xix
NI
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 5 lat
  • Lokalizacja:Warszawa
  • Postów:535
0

po pierwsze: masz podwójną deklarację zmiennej name...
po drugie: a to się nie robi tak, że w plik.h masz deklaracje zmiennych i początki funkcji(typ nazwa(argumenty)) a w pliku dll masz pełne procedury ze wszystkimi operacjami do wykonania? bo tak jest w poradnikach z google... 10 sec szukania


Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany
edytowany 1x, ostatnio: Niikelion
XI
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

He ?
Chce ładowac 10 bibliotek dll z tymi samymi funkcjami które mają argumenty.
Jak coś takiego zrobić ?

NI
to nie takie proste
XI
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

Czy w ogóle jest to możliwe ?
Chodzi mi o taki system pluginów.

NI
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 5 lat
  • Lokalizacja:Warszawa
  • Postów:535
0

a więc tak-jedyna opcja z tego co wiem to wskaźniki na funkcje. Nie mam pojęcia jak chcesz zrobić, żeby wczytywał wszystkie dll'ki które chcesz bez modyfikacji kodu...


Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany
kaczus
  • Rejestracja:około 10 lat
  • Ostatnio:około godziny
  • Lokalizacja:Łódź
  • Postów:1402
0

Dalej używasz GetProcAddress, więc jak sama nazwa wskazuje służy do wczytywania adresów funkcji (a chlebak jak sama nazwa wskazuje, służy do noszenia granatów - żeby się nie chlebotały :P Później te funkcje muszą być wywołane z takimi adresami jak wcześniej opisane w manualu.


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:minuta
1

dynamiczne ładowanie funkcji z DLL odbywa się mniej więcej tak:

Kopiuj
typedef int (*dll_proc)(int, int);

HINSTANCE dll = LoadLibrary(name);

dll_proc func = (dll_proc)GetProcAddress(dll, "FooBar"); // int FooBar(int a, int b);

int wynik = func(2, 42);

FreeLibrary(dll);

opakuj sobie to w klasę jak chcesz.

edytowany 3x, ostatnio: Azarien
XI
Nie rozumiem pierwszej linii i czy to mi ładuje do całego programu czy do jednej klasy.
XI
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

Chodzi mi o to typedef int (*dll_proc)(int, int);
I jak zrobię:

Kopiuj
void ff()
{
c1.f();
c2.f()
}
public class c1
{
typedef int (*dll_proc)(int, int);
 
HINSTANCE dll = LoadLibrary("D1");
 
dll_proc f= (dll_proc)GetProcAddress(dll, "procent"); // int procent(int a, int b);
 
int wynik = f(2, 42);
 
FreeLibrary(dll);

}
public class c2
{
typedef int (*dll_proc)(int, int);
 
HINSTANCE dll = LoadLibrary("D2");
 
dll_proc f= (dll_proc)GetProcAddress(dll, "procent"); // int procent(int a, int b);
 
int wynik = f(2, 42);
 
FreeLibrary(dll);

}

Dwie funkcje o tej smej nazwie ale w dwóch różnych dll. Zadziała ?

edytowany 1x, ostatnio: Xix
Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Nie masz bladego pojęcia, do czego służą klasy, prawda?


XI
Pochodzę od javy... A co ?
XI
C++ się z youtube uczę i wiem o klasach (z klasy objekt)
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:minuta
0

Zdefiniuj jedną klasę, która nazwę DLL-ki będzie przyjmowała jako parametr konstruktora, albo jakiejś metody "Load"

XI
Czyli to ładuje mi tylko do jednej klasy ?
XI
PS: Mniej więcej rozumiem jak tego można użuć w klasie (aż taki słaby nie jestem) ale może mi to ładuje to do całego programu...
XI
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

Czyli:

Kopiuj
public class DllLoader()
{ HInstance L;
typedef void (*dllt)() ;
dllt f;
void Load(String LibrayName
{
L = LoadLibray(LibrayName);
f = (dllt)GetProcAddress(L, "Main");
}};

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.