Fortran Coder

查看: 4887|回复: 4
打印 上一主题 下一主题

[绘图界面库] win32 api 界面转x64异常

[复制链接]

238

帖子

0

主题

0

精华

版主

World Analyser

F 币
642 元
贡献
470 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
楼主
发表于 2018-6-11 18:25:15 | 显示全部楼层
需要给出更多的代码,比如 hInstance 的定义。
你也可以简化你的代码,把绝大多数不必要的去掉,能重现问题,又尽量简短。

238

帖子

0

主题

0

精华

版主

World Analyser

F 币
642 元
贡献
470 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
沙发
发表于 2018-6-12 15:48:30 | 显示全部楼层
你这段代码根本没有考虑 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。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-6 20:41

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表