Ładowanie funkcji z argumentami

0

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

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);
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

0

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

0

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

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

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.

1

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

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.

0

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

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 ?

0

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

0

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

0

Czyli:

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1