Sugestões para o uso de Delphi para fazer arquivos multiplexados por DLL
Tente usar interfaces de DLL padrão. Isso significa que o tipo de parâmetro e o tipo de retorno da função passados não podem ser exclusivos para Delphi, como String (Ansistring), bem como matrizes dinâmicas e tipos compostos (como registros) contendo esses tipos de membros, nem eles podem conter membros de dados de membros de dados de Esses tipos de membros. Se você usar o tipo de string ou o tipo de matriz dinâmica e o chamador não é um programa Delphi, você basicamente relatará um erro. Um erro também pode ocorrer se o chamador for Delphi, mas o chamador ou o callee não estiver na primeira unidade contendo o arquivo do projeto, que não é Sharemem.
Se o chamador for um aplicativo Delphi, você poderá usar objetos que não contenham membros de dados do tipo proibido (String, Dynamic Array) como parâmetros ou valores de retorno, mas também devem ser evitados o máximo possível.
Se o chamador e a parte chamada são os programas Delphi e precisarem usar string ou matriz dinâmica como parâmetros, a primeira unidade de inclusão do arquivo de projeto entre as duas partes deve ser o Sharemem. (O programa C ++ Builder pode ser o mesmo, mas não foi testado.)
Se o chamador não for um programa Delphi, string, matriz dinâmica, tipos de dados compostos e instâncias de classe que contêm string ou matrizes dinâmicas não poderão ser usadas como parâmetros ou valores de retorno.
Portanto, para melhorar a faixa de multiplexação de DLLs e evitar possíveis erros, o tipo de parâmetro padrão Win32 padrão deve ser usado. Matrizes dinâmicas são convertidas ao tipo de ponteiro (@Array [0]) e adicione o comprimento da matriz.
Se o chamador e a parte chamada são programas Delphi e não desejarem executar a conversão acima para a conveniência da escrita, é recomendável usar a forma de um pacote de tempo de execução. Os pacotes de tempo de execução podem garantir a liberação correta de dados alocados dinamicamente. Dessa forma, devido à sua extensão (.BPL), mostra que o arquivo é limitado ao construtor Delphi/C ++ (ao contrário da DLL).
Em segundo lugar, tente evitar o uso de funções/processos de sobrecarga o máximo possível. e métodos em Delphi, como CreateByDefaultFile e CreateFault.
Finalmente, como fornecedor de DLLs, você deve fornecer arquivos de interface de programação direta, como .PAs ou .dcu em delphi (de preferência .PAs, como pode haver comentários), .h e .lib em c e c ++. Em vez de permitir que os usuários o criem. Isso é particularmente importante se você precisar ter uma função/processo de sobrecarga. Além disso, como um aplicativo Delphi, o arquivo .PAS fornecido pode ser conectado com antecedência (usando externo para especificar a função de saída na DLL) ou posteriormente (usando o LoadLibrary e GetProcaddress). mostra que é formal (ou hiqos) e garantido.