



Fala galera do Show Delphi, tudo beleza?
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.
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
Você precisa fazer o login para publicar um comentário.
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