Newsgroup: it.comp.lang.visual-basic
Titolo: creazione di una DLL con funzioni Asm

scusate, ho un po' le idee confuse. come si fa a creare una piccolissima DLL
con funzioncine scritte in Assembly Language? Una volta scritto il file
sorgente (prova.asm), che devo fare per farlo diventare una DLL leggibile da
VB?
in VB5 so che č possibile, quando creo un nuovo progetto, scegliere "ActiveX
DLL". č cosě che si deve fare? se sě, dove vado poi a srivere il sorgente?
ho provato un paio di volte, ho scelto anche "Crea Prova.dll" dal menu File,
ma ovviamente non mi riconosce nessuna riga di codice, perche non č scritta
in VB. come devo fare?
un'ultima cosa. č vero che in una DLL scritta in Asm non č possibile
inserire Interrupt? o si puň fare?
Grazie, Mario

in VB. come devo fare?
Accidenti! Poche idee ma ben confuse!
Allora, iniziamo dall'inizio.
Se ti crei una dll in asm (non me ne intendo di asm, ma il concetto č
questo), la devi compilare come dll (*.asm č il sorgente, il codice, il
listato o come lo vuoi chiamare, la dll č il compilato, _non_ confondiamo le
cose).
Questo _non_ lo puoi fare da VB, ti serve un compilatore asm.
Poi da VB puoi usare la dll (ammesso che in asm si possano scrivere dll
standard).
Da VB NON puoi caricare sorgenti in linguaggi che non siano VB!
In vb5/6 puoi creare dll activex (certo che č possibile), ma questo in VB!
Insomma, se usi un'auto a benzina e ci metti gasolio non puoi pretendere che
funzioni anche se la procedura (apri il bocchettone, ci infili la pistola,
eroghi carburante (o combustibile nel caso del gasolio) č corretta.
Ciao

 in VB. come devo fare?
allora, innanzitutto devi aggiungere al progetto un modulo-fantasma, con lo
stesso nome del programma ASM, e che contenga le stesse identiche funzioni
contenute nel programma ASM (non dico il codice, intendo dire solo i nomi delle
funzioni e i parametri giusti). I simboli delle funzioni devono essere
compatibili con quelli di VB, sennò il linker rompe le scatole. Il formato dei
decorated name delle funzioni, in VB è ?NomeFunzione@NomeModulo@@AAGXXZ, apri
con un editor di testo il sorgente del programma ASM e cambiali in modo che
siano nella forma giusta. A questo punto, se non ce l'hai già, devi procurarti
un compilatore per assembly, direi che il MASM va più che bene, ci compili il
programma ASM, e lui ti crea un file OBJ. La parte noiosa arriva adesso. Devi
rinominare il file link.exe, magari rinominalo come linker.exe, e farti un
semplice programmino in VB, di questo genere: un form con un command button, e
questo semplice codice:
Private Sub Command1_Click()
    shell "linker.exe " + command$
End Sub
Compila questo programma come link.exe e mettilo nella cartella di VB, assieme
al link.exe rinominato. Ora comincia a compilare il programma in cui vuoi
includere il modulo ASM, salterà fuori il tuo programmino con il pulsante. Non
premerlo, non ancora. Apri la directory contenente il file del progetto che stai
compilando, ci dovrebbe essere un file OBJ per ogni modulo. Elimina quello del
modulo-fantasma e sostituiscilo con quello del modulo ASM (mi raccomando, devono
avere lo stesso nome). Fatto ciò, premi il pulsante. Il linker fonderà assieme
tutti gli OBJ, creando il programma. Provalo, c'è un 80% di possbilità che
qualcosa vada storto

miiiiiiiiiiiiiii non ho capito niente...
no scherzo qualcosa ho capito.
allora, che ci voleva un compilatore "esterno" lo avevo vagamente intuito.
ho scaricato Nasm. mi hanno detto che Masm essendo della microsoft funzina
meglio... ma non sono ruiscito a trovarlo su internet.
ho praticamente fatto cosě.
ho screitto il programma prova.asm, poi l'ho compilato con Nasm e ha
funzionato.
poi (senza rinominare link.exe) l'ho ricompilato, insomma non so se si dice
cosě, cmq ho fatto "link /dll [un altro po di parametri che non ricordo]
myDll.o" e funziona.
insomma, alla fine, richiamando la funzione con declare function [...] lib
"myDll.dll" ecc ecc FUNZIONA!!!!
c'č solo un piccoliiiiiiiiiiiiissimo problema...
quando linko il tutto (cioe quando faccio correre link.exe con i parametri
vari suggeritimi da Nasm) mi esce questo:
warning (e qui mi inizio a preoccupare): LNK4086: entropoint "_DllMain" is
not _stdcall 12 bytes of arguments: image may not run.
allora, quei 12 byte di arguments sarebbero sicuramente i due argomenti
passati alla funzione, che io poi ripesco con [bp+8] e [bp+12], giusto?
ma quel messaggio di errore che cosa vuole dire? quale questa image che non
puo funzionare? quando poi funziona benissimo...
grazie 1000
ps: come č complicato Asm...

GRAAAANDE HYPERION
--
Fibia "Sakamoto" FBI
URL: 
www.geocities.com/fibiafbi
E-Mail: 
fibi...@hotmail.com
ICQ UIN 63586057