Hola.
Estaba buscando una forma de obtener la linea de comandos desde un programa escrito para MASM con la funcion GetCommandLineA de kernel32.lib, pero el linker no resuelve el simbolo:
CitarPOLINK: error: Unresolved external symbol '_GetCommandLineA'.
Lei sobre las convenciones de llamada en un articulo mencionado por
@Eternal Idol: http://unixwiz.net/techtips/win32-callconv.html#decor (http://unixwiz.net/techtips/win32-callconv.html#decor) pero la verdad no estoy seguro de en que esta afectando esto aqui.
El codigo:
.686p
.model flat, stdcall
includelib \masm32\lib\msvcrt.lib
includelib \masm32\lib\kernel32.lib
printf proto C, :dword
exit proto C, :dword
extern stdcall GetCommandLineA: proc
t macro i:vararg
local s
const segment
s db i, 0
const ends
exitm <offset s>
endm
.data?
db ?
.data
db ?
.code
start:
call main
invoke exit, 0h
main proc
call GetCommandLineA
ret
main endp
end start
extern stdcall GetCommandLineA@0: proc
...
call GetCommandLineA@0
No puede ser... eso habia intentado pero con proto e invoke. ¿Por que no funciona con proto e invoke?
GetCommandLineA@0 proto stdcall
CitarPOLINK: error: Unresolved external symbol '_GetCommandLineA@0@0'.
Pero lo es, con PROTO e INVOKE no hace falta explicitar el decorado.
GetCommandLineA PROTO STDCALL
...
invoke GetCommandLineA
Pues tienes razon... me estoy acordando de los tropiezos de aprender una nueva forma de programacion.
Gracias por tu ayuda y atencion.
Saludos.
De nada ::)