StrPtr类型在64位模式下不匹配

问题描述 投票:1回答:1

我在Access 2013中使用了以下代码(从网站上获取了它)。它没有任何问题。

Private Declare Function GdipCreateBitmapFromFile Lib "gdiplus.dll" (ByVal FileName As Long, bitmap As Long) As Long

If GdipCreateBitmapFromFile(StrPtr(sFileName), hPic) = 0 Then ....

在为Access 2013 64位运行时安装删除32位组件之后,出现编译器错误。我在声明后添加PtrSafe,编译器就可以了。

Private Declare PtrSafe Function GdipCreateBitmapFromFile Lib "gdiplus.dll" (ByVal FileName As Long, bitmap As Long) As Long

If GdipCreateBitmapFromFile(StrPtr(sFileName), hPic) = 0 Then ....

但是,它将出现运行时错误-StrPtr中的类型不匹配。不知道如何解决。

access-vba 32bit-64bit
1个回答
5
投票

将LongPtr用于64位而不是Long。

Private Declare PtrSafe Function GdipCreateBitmapFromFile Lib "gdiplus.dll" (ByVal FileName As LongPtr, bitmap As Long) As Long

0
投票

我将如何解决这个问题?

公共函数ToUTF8(ByRef inString作为字符串)作为字符串昏暗的BufLen只要

BufLen = WideCharToMultiByte(CP_UTF8, 0&, ByVal StrPtr(inString), _
    Len(inString), vbNullString, 0&, vbNullString, ByVal 0&)
If (BufLen > 0) Then
    ToUTF8 = Space$(BufLen)
    Call WideCharToMultiByte(CP_UTF8, 0&, ByVal StrPtr(inString), _
        Len(inString), ToUTF8, BufLen, vbNullString, ByVal 0&)
End If

结束功能

© www.soinside.com 2019 - 2024. All rights reserved.