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
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. |
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
-
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!
Posts Relacionados - Continue Aprendendo
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