MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


3 participantes

    [Resolvido]Problema com API e Access 64 bits

    CassioFabre
    CassioFabre
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 731
    Registrado : 18/01/2013

    [Resolvido]Problema com API e Access 64 bits Empty [Resolvido]Problema com API e Access 64 bits

    Mensagem  CassioFabre 10/2/2017, 14:25

    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.
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7995
    Registrado : 15/03/2013

    [Resolvido]Problema com API e Access 64 bits Empty Re: [Resolvido]Problema com API e Access 64 bits

    Mensagem  Alvaro Teixeira 10/2/2017, 15:01

    Olá Cassio, estou no celular.
    Mas acho que na parte do "64bit" deve atribuir do tipo LongLong e não Long.
    Teste aí ou confira no artigo da Microsoft.
    Abraço
    CassioFabre
    CassioFabre
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 731
    Registrado : 18/01/2013

    [Resolvido]Problema com API e Access 64 bits Empty Problema com API e Access 64 bits

    Mensagem  CassioFabre 10/2/2017, 15:20

    Boa tarde,

    Também testei o uso do LongLong e acontece a mesma coisa do que quando usei LongPtr, ou seja, não acusa erro mas também não mostra as imagens.

    Abraço.
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7995
    Registrado : 15/03/2013

    [Resolvido]Problema com API e Access 64 bits Empty Re: [Resolvido]Problema com API e Access 64 bits

    Mensagem  Alvaro Teixeira 10/2/2017, 15:27

    Olá, pode mostrar qual e onde está ocorrer erro.
    Se poder montar base de dados de teste para podermos verificar.
    Assim que esteja com pc tento ajudar.
    Abraço
    CassioFabre
    CassioFabre
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 731
    Registrado : 18/01/2013

    [Resolvido]Problema com API e Access 64 bits Empty Problema com API e Access 64 bits

    Mensagem  CassioFabre 15/2/2017, 06:50

    Bom dia,

    Desculpe a demora, tenho estado um tanto quanto atarefado nos últimos dias.

    Estou mandando em anexo o modelo do sistema com o backend. Espero que dê pra ter uma noção.

    Usuario: admin
    senha: 132

    Abraço.
    CassioFabre
    CassioFabre
    Super Avançado
    Super Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 731
    Registrado : 18/01/2013

    [Resolvido]Problema com API e Access 64 bits Empty Problema com API e Access 64 bits

    Mensagem  CassioFabre 15/2/2017, 09:01

    Bom dia,

    Reportando que consegui resolver o problema.

    O meu erro estava em atribuir as condicionais de 64 bits (estava usando #if VBA7 Then) apenas na declaração das APIs, quando na verdade deveria extende-la a todo código colocando as variáveis long de 64 bits (LongLong ou LongPtr).

    Então dupliquei o código do módulo e então coloquei da seguinte forma:
    Código:
    #If Win64 Then
        ' Todo o código do módulo utilizando LongLong ou LongPtr
    #Else
        ' Todo o código do módulo utilizando apenas Long (32bits)
    #End if

    Espera que dê para entender.

    Abraço.
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7995
    Registrado : 15/03/2013

    [Resolvido]Problema com API e Access 64 bits Empty Re: [Resolvido]Problema com API e Access 64 bits

    Mensagem  Alvaro Teixeira 15/2/2017, 09:18

    Olá Cassio,
    É isso mesmo, obrigado pelo retorno.
    Abraço
    crysostomo
    crysostomo
    Maximo VIP
    Maximo VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2741
    Registrado : 23/01/2018

    [Resolvido]Problema com API e Access 64 bits Empty Re: [Resolvido]Problema com API e Access 64 bits

    Mensagem  crysostomo 8/5/2019, 13:23

    amigo, boa tarde. ainda utilizo o 32bits, mas pra frente vou ter problema com isso, eu não entendi bem essa declaração como foi concertada, poderia disponibilizar-la?


    .................................................................................
    Obs.: Coloque somente as partes defeituosas para que possamos encontrar e entender  o problema mais rápido para lhe ajudar. Disponho.
    Uma mão ajuda a outra.
    Feliz aquele que transfere o que sabe e aprende o que ensina.

    Conteúdo patrocinado


    [Resolvido]Problema com API e Access 64 bits Empty Re: [Resolvido]Problema com API e Access 64 bits

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 7/11/2024, 19:37