Boa tarde,
Tenho um sistema rodando tudo certo no Access 2007 32 Bits. Utilizo ribbons personalizadas e, ainda, imagens personalizadas nos botões. Fui portar o sistema para Access 2010 64 Bits e começou a dar o famoso erro da falta do PtrSafe. Até aí tudo bem, coloquei a condicional conforme manda a microsoft e tudo mais. O meu problema está na função LoadImage (que carrega as imagens personalizadas nos botões, do grande mestre Avelino). Ela simplesmente não carrega mais as minhas imagens personalidas (o mesmo código funciona perfeitamente na versão 2007 32 bits). Tenho várias outras APIs no sistema e essas funcionam perfeitamente.
Abaixo a declaração de uma das APIs necessárias para a função:
Private Declare PtrSafe Function GdipCreateBitmapFromFile Lib "gdiplus" (ByVal FileName As Long, BITMAP As Long) As Long
Abaixo a função LoadImage:
Public Function LoadImage(ByVal strFName As String) As IPictureDisp
Dim uGdiInput As GdiplusStartupInput
Dim hGdiPlus As Long
Dim hGdiImage As Long
Dim hBitmap As Long
uGdiInput.GdiplusVersion = 1
If GdiplusStartup(hGdiPlus, uGdiInput) = 0 Then
If GdipCreateBitmapFromFile(StrPtr(strFName), hGdiImage) = 0 Then
GdipCreateHBITMAPFromBitmap hGdiImage, hBitmap, 0
Set LoadImage = ConvertToIPicture(hBitmap)
GdipDisposeImage hGdiImage
End If
GdiplusShutdown hGdiPlus
End If
End Function
Os trechos destacados, do jeito que estão aí, fazem com que o Access acuse o famoso erro de incompatibilidade de tipo (erro 13). Pesquisando bastante, descobri que o trecho destacado da API, nas versões 64 bits, deve ser declarado como:
Private Declare PtrSafe Function GdipCreateBitmapFromFile Lib "gdiplus" (ByVal FileName As LongPtr, BITMAP As Long) As Long
Ok, ai o Access parou de acusar o erro 13, porém mesmo assim as imagens não são carregadas.
Procurei muito, em vários sites brasileiros e gringos, nos fóruns da microsoft, em todo lugar, mas nenhuma resposta me ajudou. Agradeço desde já qualquer ajuda que alguém possa dar.
Abraço.
Tenho um sistema rodando tudo certo no Access 2007 32 Bits. Utilizo ribbons personalizadas e, ainda, imagens personalizadas nos botões. Fui portar o sistema para Access 2010 64 Bits e começou a dar o famoso erro da falta do PtrSafe. Até aí tudo bem, coloquei a condicional conforme manda a microsoft e tudo mais. O meu problema está na função LoadImage (que carrega as imagens personalizadas nos botões, do grande mestre Avelino). Ela simplesmente não carrega mais as minhas imagens personalidas (o mesmo código funciona perfeitamente na versão 2007 32 bits). Tenho várias outras APIs no sistema e essas funcionam perfeitamente.
Abaixo a declaração de uma das APIs necessárias para a função:
Private Declare PtrSafe Function GdipCreateBitmapFromFile Lib "gdiplus" (ByVal FileName As Long, BITMAP As Long) As Long
Abaixo a função LoadImage:
Public Function LoadImage(ByVal strFName As String) As IPictureDisp
Dim uGdiInput As GdiplusStartupInput
Dim hGdiPlus As Long
Dim hGdiImage As Long
Dim hBitmap As Long
uGdiInput.GdiplusVersion = 1
If GdiplusStartup(hGdiPlus, uGdiInput) = 0 Then
If GdipCreateBitmapFromFile(StrPtr(strFName), hGdiImage) = 0 Then
GdipCreateHBITMAPFromBitmap hGdiImage, hBitmap, 0
Set LoadImage = ConvertToIPicture(hBitmap)
GdipDisposeImage hGdiImage
End If
GdiplusShutdown hGdiPlus
End If
End Function
Os trechos destacados, do jeito que estão aí, fazem com que o Access acuse o famoso erro de incompatibilidade de tipo (erro 13). Pesquisando bastante, descobri que o trecho destacado da API, nas versões 64 bits, deve ser declarado como:
Private Declare PtrSafe Function GdipCreateBitmapFromFile Lib "gdiplus" (ByVal FileName As LongPtr, BITMAP As Long) As Long
Ok, ai o Access parou de acusar o erro 13, porém mesmo assim as imagens não são carregadas.
Procurei muito, em vários sites brasileiros e gringos, nos fóruns da microsoft, em todo lugar, mas nenhuma resposta me ajudou. Agradeço desde já qualquer ajuda que alguém possa dar.
Abraço.