你这段代码根本没有考虑 64 位的兼容性。
考虑了兼容性的代码大概形如:
[Fortran] 纯文本查看 复制代码 function WinMain(hInstance,hPrevInstance,lpszCmdLine,nCmdShow )
!DEC$ IF DEFINED(_X86_)
!DEC$ ATTRIBUTES STDCALL, ALIAS : '_WinMain@16' :: WinMain
!DEC$ ELSE
!DEC$ ATTRIBUTES STDCALL, ALIAS : 'WinMain' :: WinMain
!DEC$ ENDIF
use user32
use kernel32
use dfwin
use dflogm
implicit none
integer(SINT) :: WinMain
integer(HANDLE) hInstance
integer(HANDLE) hPrevInstance
integer(LPWSTR) lpszCmdLine
integer(SINT) nCmdShow
其中,类似注释那部分告诉编译器,根据 X86 或 X64 分别指定WinMain的属性。
而
integer(SINT) :: WinMain
integer(HANDLE) hInstance
integer(HANDLE) hPrevInstance
integer(LPWSTR) lpszCmdLine
integer(SINT) nCmdShow
这些定义中,括号里的内容,比如 HANDLE,会自动在32位下选择为 4,而在64位下选择为8。
|