DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
voltar

PARA QUEM GOSTA DE DELPHI

Como evitar o Access Violation em DLL que utilizam o Dev Express

Fala galera do Show Delphi, tudo beleza?

Como evitar o Acess Violation em DLL que utilizam o Dev Express

Access Violation Dll Dev Empress

Quando vamos utilizar DLLs, as vezes vamos ter dor de cabeça (muitas vezes, rsrsrs). E uma situação que me deparei ao montar uma dll era que o projeto estava funcionando corretamente, mas após adicionar um componente do Dev Express nele, a DLL passou a apresentar problemas.

Neste caso ela nem carregava, ocorrendo um access violation.

Depois de muita pesquisa, descobre que precisamos de um comando adicional para que a dll funcione corretamente.

Bem vamos ao código.

 

Primeiramente é necessário declarar dxCore na seção uses do arquivo do projeto.

Quem tem alguma versão mais antiga, utilize a unit dxGDIPlusClasses.

na parte do begin / end, adicione:

Para versões recentes:
dxCore.dxInitialize;

Para versões antigas:
dxInitializeGDIPlus;

Confuso? Vamos ao exemplo com código completo!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
library MinhaDLL;
 
{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }
 
uses
  dxCore, // <--- Necessário
  System.SysUtils,
  System.Classes
  ...
  ;
 
{$R *.res}
 
// ....  seu código
 
begin
  dxCore.dxInitialize; <-- aqui está o pulo do gato
 
end.

Espero que tenha ajudado pessoal! Em caso de dúvidas, deixe o seu comentário.

Um abraço e até o próximo post. Valeu!

Fonte Base: https://supportcenter.devexpress.com/ticket/details/b199204/where-did-dxinitializegdiplus-go

Facebook Comments Box
  • Giovani Da Cruz
  • 402 views
  • 1 comentários
  • 29 de dezembro de 2022

Está gostando do conteúdo? Considere pagar um cafezinho para nossa equipe!

Uma resposta para “Como evitar o Access Violation em DLL que utilizam o Dev Express”

  1. mariodosreis disse:

    Estou tendo uma dor de cabeça daquelas não consigo regsvr32 minha_dll.dll “o mádulo … foi carregado, mas o ponto de entrada do DllRegisterServer não foi encontrado”.
    E, não encontro solução alguém saberá?
    Obrihgado

Deixe um comentário

Ir ao topo

© 2024 Infus Soluções em Tecnologia - Todos os Direitos Reservados