Newsgroup: it.comp.lang.c++
Titolo: argomenti e funzioni in un dll

Ciao,
ho un file dll di cui conosco le funzioni contenute all'interno, come posso 
scoprire quanti argomenti passare ad ogni funzione e di che tipo di 
argomenti si tratta?
grazie per l'aiuto 

 argomenti si tratta?
Ha poco a che vedere col C++. Chiedi in un ng che si occupi di Windows.
Kiuhnm

 da mal di testa, ovviamente.
Tipo procurarsi gli header file corrispondenti? ;-)
Tertium non datur, ahime', salvo abbandonare il progetto.
Ciao,
Nicola

 Non sono a conoscenza di implementazioni che non lo usano.
Si, ma spesso nelle DLL si usa la vecchia chiamata pascal (o __stdcall), la 
cui decorazione e' minima: una funzione xxxx diventa _xxxx@paramsize.
Quel "paramsize" e' la dimensione totale dei parametri, che in alcuni casi 
particolari puo' aiutare a dedurre i parametri.
In altri casi le decorazioni spariscono, e tanti saluti.
Sono pochi i casi in cui ho visto una dll che pubblichi le funzioni decorate 
a la C++ (e di solito sono talmente ben fatte da essere legate ad una 
specifica versione del compilatore/RTL, rendendo praticamente inutile la 
loro esistenza come librerie dinamiche).
--
Marco *PaN!* Foco 

 loro esistenza come librerie dinamiche).
Va bene che si sta considerando il caso di indovinare i parametri di 
chiamata di funzioni di una DLL sconosciuta, ma credo che dopo aver 
risolto il rebus del numero e tipo dei parametri incogniti sia possibile 
comunque chiamare la DLL esattamente come faceva il programma con cui è 
stata distribuita... la tua ipotesi mi pare un caso estremo dell'inferno 
delle DLL.

con un disassembler ho dato un occhio alla dll e sono riuscito a scoprire il 
numero di parametri da passare ad ogni funzione...per quanto riguarda il 
tipo me li segnala tutti come dword, come mai? e soprattutto cos'è questa 
dword? so che in c++ esiste il tipo DWORD ma non so bene cos'è. qualcuno mi 
saprebbe spiegare?
un'altra cosa, solo 2 funzioni su una sessantina restituiscono un valore 
dword mentre per tutti gli altri non è specificato, restituiranno tutti un 
valore void? o che altro caso ci potrebbe essere?
ho creato così la mia dll che logga tutte le chiamate del programma e 
richiama la dll originale, ovviamente nel log leggo qualcosa di questo 
genere:  funzioneN(0, 234523, 4459827)
non so di che cosa si tratti...ma credo ke con un po di prove sia possibile 
riuscire ad usare la dll originale senza problemi. 

saprebbe spiegare?
DWORD non è un tipo del C++, ma è uno dei tipi definiti negli header
per la programmazione per Windows (Su Win32 un DWORD è un intero senza
segno a 32 bit).  Imposto quindi il follow-up su
it.comp.programmare.win32.

 Tipo procurarsi gli header file corrispondenti? ;-)
E perche non la documentazione? Sapere che la funzione prende un
int non ti avanza molto, se non sai cosa significa questo int.
--
James Kanze (GABI Software)             
email:james...@gmail.com
Conseils en informatique orientée objet/
                   Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, 
+33 (0)1 30 23 00 34

 la tua ipotesi mi pare un caso estremo dell'inferno delle DLL.
Vero, forse sono un po' troppo pessimista talvolta ;)
--
Marco