• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

dynamiczne argumenty funkcji jako stringi? O_o

Object Storage Arubacloud
0 głosów
347 wizyt
pytanie zadane 3 maja 2015 w C i C++ przez jegor377 Stary wyjadacz (13,230 p.)

Witam! Mam pytanie, otóż, chcę napisać program, który przyjmuje nazwę dll, funkcję do wywołania oraz argumenty (wszystko jako stringi, albo const chary...), lecz tutaj jest mały problem, bo każda funkcja w cpp ma określone typy i argumenty z góry (no chyba, że robimy funkcję z dynamiczną ilością parametrów). Więc jak zrobić, by to co wyślę program potraktował jako te argumenty, a nie jako stringi? Wiem, że jest takie polecenie w cmd, które potrafi wykonać ową czynnoś (o ile się nie mylę, to razem z tymi parametrami) i nazywa się "regsvr32"... :>

3 odpowiedzi

+1 głos
odpowiedź 3 maja 2015 przez hit02 Nałogowiec (33,970 p.)
Ja bym to zrobił za pomocą LoadLibrary(), a następnie wywoływał GetProcAdress() i wtedy powinieneś móc wywołać funkcję.

Co do argumentów, to ich liczba nie jest zapisana w dll chyba, że nazwa funkcji jest udekorowana, ale chyba łatwiej będzie ci poprostu przekazać wszystkie podane przez usera argumenty.

Nie jestem pewien jak je przekazać. Jeśli nie znajdziesz prostrzego sposobu, to możesz kombinować z wrzucaniem liczb i adresów ciągów na stos.
komentarz 5 maja 2015 przez jegor377 Stary wyjadacz (13,230 p.)
Spoko, ale to nie to dokońca, a z tym stosem wolę się nie bawić, bo mi wstawki nie dzialaja, bo jestem slaby w assembly jak narazie... xD
+1 głos
odpowiedź 3 maja 2015 przez Dorion300 Szeryf (90,250 p.)

Nie ma to jak utrudniać sobie życia ładująć biblioteczki przez inny program.

Nie dość że może nie działać jak biblioteczka jest wadliwa albo niestnieje to jeszcze mało optymalne i wolne.

#include <iostream>>
#include <windows.h>
#include <conio.h>

int main()
{
    typedef string(*funkcja) (string);
	
	HINSTANCE lib = LoadLibrary("Biblioteka");
    if(lib == NULL)
    {
        cout << "brak biblioteki!" << endl;
        getch();
        return 1;
   }
    funkcja test =(funkcja)GetProcAddress(lib,"Funkcja_ktora_jest_w_dll");
    if(test == NULL)
    {
        cout << "nieprawidlowa biblioteka!" << endl;
        getch();
        return 2;
    }
	//Teraz mozesz spokojnie używać funkcję 
	test("plądruj");
	
	//Po wykonaniu czynnosci z biblioteką trzeba zamknąć za pomocą
	FreeLibrary(lib);
	getch();
	return 0;
}

 

komentarz 5 maja 2015 przez jegor377 Stary wyjadacz (13,230 p.)
No spoczko, lecz taki sposób już znam. Mi chodziło bardziej o to, zeby program sam wiedzial jakie typy danych wyslac i ile argumentów... :/ jestem pewien, że to jest możliwe zwarzywszy na ten moduł i język AutoIt, który potrafi ladowac dll, chodź jest językiem skryptowym. Te stringi to sobie bez problemu zamienie na kazdy typ... :>
komentarz 5 maja 2015 przez jegor377 Stary wyjadacz (13,230 p.)
Jednak dzienki! ;D
0 głosów
odpowiedź 3 maja 2015 przez jegor377 Stary wyjadacz (13,230 p.)
a nie, to chodziło mi o tą:

http://pl.wikipedia.org/wiki/Rundll

Podobne pytania

+6 głosów
17 odpowiedzi 892 wizyt
pytanie zadane 30 kwietnia 2015 w Offtop przez niezalogowany
0 głosów
1 odpowiedź 895 wizyt
0 głosów
1 odpowiedź 103 wizyt
pytanie zadane 9 czerwca 2019 w Java przez Adam Polak Początkujący (430 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...