Jump to content

click.png click.png click.png

click.png

click.png

click.png

Seja-Profissional-Saiba-mais.png Beneficios_banner.png

 

click.png

click.png

click.png

click.png

click.png

click.png

DEFINES do ACBR32.DLL


  • Este tópico foi criado há 3849 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Onde o define para convenção de chamada STDCALL do Acbr32.dll? Já dei find in sources na base

de código inteira, e nem sinal. O arquivo de importação do C# está usando cdecl para

importar e isso está dando pau direto pois a DLL está sendo compilada como STDCALL.

Ambiente (nativo):

Lazarus 0.9.30

Ambiente (dotNet):

Visual Studio 2010 (C#)

Link to comment
Share on other sites

Oi Fabrício,

Cara, a ACBrDLL possui os defines pra compilar tanto em STDCALL quanto em CDECL. No Delphi, na propriedade do projeto vc coloca os defines usados na compilação.

Até agora estamos fazendo assim:

A compilação "default" é em CDECL pra funcionar mais facilmente para criar o .lib (a biblioteca de vínculo estático, usada pra compilar os programas em C; Não confundir com a .lib usada em linux)

Funcionaria em STDCALL, mas a diferença básica entre um método de chamada e o outro, é que o STDCALL deixa a cargo da linguagem que fez a chamada realizar a limpeza da pilha de memória dos parâmetros usados, enquanto a CDECL deixa a cargo da DLL fazer isso.

Pra usar STDCALL teria que fazer um trabalhinho extra em colocar e manter o tamanho dos parâmetros na definição da .lib. Até onde eu sei o Delphi não compila uma .lib, então esse processo de criá-la é bem manual.

Como tenho planos em compilar ela pra linux e rodar em Java e Mono, acho que o CDECL vai ser o caminho mais natural, acho que o linux não suporta o STDCALL.

O VB6, FOXPRO, e outras linguagens não fazem chamadas em CDECL, aí temos que manter uma versão da DLL em STDCALL pra elas.

****

No seu caso, é só colocar o CDECL nos defines do projeto e compilar, mantendo o CDECL no C#.

Qualquer dúvida, estamos aí.

Abs,

Rafael Batiati

ACBrFramework - Automação comercial para todos.

MultiClubes - Soluções para a área de clubes, parques, lazer e entretenimento.

Link to comment
Share on other sites

Oi Fabrício,

Cara, a ACBrDLL possui os defines pra compilar tanto em STDCALL quanto em CDECL. No Delphi, na propriedade do projeto vc coloca os defines usados na compilação.

Não fui claro, pelo visto. Eu não sei xongas de Lazarus (que é o que posso usar aqui), e não tenho Delphi (quem dera :roll:) onde eu estou usando a ACBr - entao estou usando Lazarus.

E outra: o ACBr32.dll já está com o símbolo STDCALL definido.

Coloquei um $UNDEF para remover o símbolo (gambiarra) - porque não achei onde essa goiaba está definida. O "Find in Files..." do Lazarus nada encontrou - de todas as linhas (10000+) onde existe um STDCall definido na ACBr, nenhuma delas é um $DEFINE.

Como eu não quero bagunçar o coreto, onde está esse {$DEFINE STDCALL} para que eu possa comentá-lo e fazer a alteração da maneira que foi imaginada por vocês?

Link to comment
Share on other sites

Hehehe,

Você não sabe xongas, e eu não sei milongas!!! Vergonhoso, admito, mas só sei o básico de object pascal e da IDE do Delphi.

Mas você está certo, não há $DEFINE em lugar nenhum do código, esses defines são feitos nas propriedades do projeto (em Delphi), e admito (vergonhoso novamente), eu não achei a tela equivalente na IDE do Lazarus.

O que precisa fazer é remover o STDCALL dos defines e colocar o CDECL em seu lugar.

Quer que eu compile a DLL em CDECL e te envie em quanto isso?

Daniel, pode nos ajudar com o Lazarus?

Abs!

Rafael Batiati

ACBrFramework - Automação comercial para todos.

MultiClubes - Soluções para a área de clubes, parques, lazer e entretenimento.

Link to comment
Share on other sites

Hehehe,

Você não sabe xongas, e eu não sei milongas!!! Vergonhoso, admito, mas só sei o básico de object pascal e da IDE do Delphi.

Mas você está certo, não há $DEFINE em lugar nenhum do código, esses defines são feitos nas propriedades do projeto (em Delphi), e admito (vergonhoso novamente), eu não achei a tela equivalente na IDE do Lazarus.

O que precisa fazer é remover o STDCALL dos defines e colocar o CDECL em seu lugar.

Quer que eu compile a DLL em CDECL e te envie em quanto isso?

Daniel, pode nos ajudar com o Lazarus?

Abs!

Então somos dois perdidos. :lol: No meu note, eu tenho delphi - mas no ambiente de trabalho onde eu estou usando ACBr preciso usar Lazarus (trabalho em 2 lugares, um usa Delphi e outro dotNet - o Lazarus está no trabalho em dotNet).

Hoje estou escrevendo do note. Sugiro tirar esse $DEFINE STDCALL da propriedade do projeto e criar um ACBR32DLL.INC (tal como existe no ACBr principal).

Até lá, me viro com o $UNDEF no arquivo lpr - parece que todo o projeto está seguindo, não preciso copiar isso em todos os fontes da DLL.

Link to comment
Share on other sites

  • Este tópico foi criado há 3849 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.