Ładowanie funkcji z argumentami

Odpowiedz Nowy wątek
Xix
2015-05-24 20:05
Xix

Rejestracja: 5 lat temu

Ostatnio: 3 lata temu

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);
edytowany 1x, ostatnio: Xix, 2015-05-24 22:04

Pozostało 580 znaków

2015-05-24 21:01

Rejestracja: 6 lat temu

Ostatnio: 4 miesiące temu

Lokalizacja: Warszawa

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, 2015-05-24 21:05

Pozostało 580 znaków

Xix
2015-05-24 22:03
Xix

Rejestracja: 5 lat temu

Ostatnio: 3 lata temu

0

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

to nie takie proste - Niikelion 2015-05-25 17:13

Pozostało 580 znaków

Xix
2015-05-24 23:17
Xix

Rejestracja: 5 lat temu

Ostatnio: 3 lata temu

0

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

Pozostało 580 znaków

2015-05-25 17:13

Rejestracja: 6 lat temu

Ostatnio: 4 miesiące temu

Lokalizacja: Warszawa

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

Pozostało 580 znaków

2015-05-25 17:32

Rejestracja: 4 lata temu

Ostatnio: 2 dni temu

Lokalizacja: Łódź

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

Pozostało 580 znaków

2015-05-25 18:24

Rejestracja: 16 lat temu

Ostatnio: 2 godziny temu

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.

edytowany 3x, ostatnio: Azarien, 2015-05-25 18:25
Nie rozumiem pierwszej linii i czy to mi ładuje do całego programu czy do jednej klasy. - Xix 2015-05-26 22:03

Pozostało 580 znaków

Xix
2015-05-27 20:48
Xix

Rejestracja: 5 lat temu

Ostatnio: 3 lata temu

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 ?

edytowany 1x, ostatnio: Xix, 2015-05-28 21:36

Pozostało 580 znaków

2015-05-27 20:51
Moderator

Rejestracja: 12 lat temu

Ostatnio: 4 godziny temu

Lokalizacja: Wrocław

0

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


Pochodzę od javy... A co ? - Xix 2015-05-27 20:56
C++ się z youtube uczę i wiem o klasach (z klasy objekt) - Xix 2015-05-27 20:58

Pozostało 580 znaków

2015-05-28 10:22

Rejestracja: 16 lat temu

Ostatnio: 2 godziny temu

0

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

Czyli to ładuje mi tylko do jednej klasy ? - Xix 2015-05-28 21:28
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... - Xix 2015-05-28 21:31

Pozostało 580 znaków

Xix
2015-05-28 21:39
Xix

Rejestracja: 5 lat temu

Ostatnio: 3 lata temu

0

Czyli:

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

Pozostało 580 znaków

Odpowiedz

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