Recomendação para invólucro C ++ para plataforma transversal em-processo ligações biblioteca dinâmica (isto é, um peso leve, de alto desempenho COM ou CORBA) [fechado]

StackOverflow https://stackoverflow.com/questions/1854323

Pergunta

Estamos desenvolvendo um aplicativo que terá um plug-in "arquitetura" para permitir aos consumidores do aplicativo para fornecer os seus próprios algoritmos proprietários. (Nós, basicamente, ter um conjunto de analisadores e permitir que terceiros para fornecer o seu próprio bem)

O espaço de domínio exige um desempenho muito elevado, de modo out-of-process ligações não estão indo para o trabalho e nós preferimos deixar as coisas pesadas como CORBA e COM sozinho.

Basicamente estamos procurando um simples invólucro de plataforma cruzada em torno de:

  • biblioteca de carregamento de um caminho relativo
  • fornecer um mapeamento da dll especial / .so para alguma configuração / name
  • fazer alguma inicialização e consultar a biblioteca para garantir que ele fornece a funcionalidade necessária

Eu acho que isso é realmente apenas uma envolvendo em torno de LoadLibrary () e as chamadas de método exportados. Podemos escrever este nós mesmos, mas prefiro usar código existente como temos o suficiente no nosso prato.

Mais uma vez, o rendimento e desempenho são muito, muito importante.

perguntas similares são:

Cross-plataforma alternativa para COM - este é perto, mas nós queremos in-processo só - sem necessidade de fora do processo e as nossas necessidades são um pouco "mais leve"

.

C ++ Cruz Plataforma bibliotecas dinâmicas; Linux e Windows

Isto é para não gerenciado C ++ - não podemos usar .NET

EDIT - o que encontramos

Poco funciona muito bem para as nossas necessidades. Como um bônus Esta página é um comentário muito apreciado sobre o estado de desenvolvimento C ++ e a direção idioma ...

Foi uma simples plataforma de embrulho cruz que precisávamos que Poco fornece. Realmente não há muito a ele, mas ainda poupa-nos tempo e testes. Nenhuma sobrecarga adicional durante o tempo de execução.

Foi útil?

Solução 2

Eu acho que isso também pode funcionar: http://pocoproject.org/docs/Poco.SharedLibrary.html

Outras dicas

O ACE biblioteca contém invólucros para carregamento de biblioteca dinâmica que cruz trabalho plataforma. Se você quiser mais conforto do que LoadLibrary planície em seguida olhar para TAO A ACE ORB . Usando corba com TAO é extemamente alto desempenho e muito provavelmente supera qualquer auto trabalhada plugin de infra-estrutura, especialmente se você usar em chamadas de processo, como TAO otimiza-los.

Para usar a plataforma cruzada biblioteca dinâmica invólucro usar ACE_DLL. Ele fornece o wrapper plataforma mais básico cruz em torno de LoadLibrary () que você mencionou.

Entre usando ACE_DLL e usando TAO é o quadro de configuração de serviço da ACE que permite objetos de carga dinamicamente. Após o carregamento você pode obter um ponteiro upcast ao objeto carregado que você implementou e pode chamar qualquer método no objeto carregado.

O código para fazer isso ficaria assim:

char const * const cpc_myClass = ACE_DYNAMIC_SERVICE_DIRECTIVE(
  "myclass",
  "dllname",
  "_make_MyClass",
  ""
);
result = ACE_Service_Config::process_directive(cpc_myClass);
MyClass * p_obj = ACE_Dynamic_Service<MyClass>::instance ("myclass");
p_obj->callAnyMethodYouLike();

Aqui é explicado que TAO conhece dois tipos de otimização de colocation (thru_poa e diretas):

Ao usar a estratégia direta, método invocações em objetos co-instalados tornar chamadas diretas para servo sem verificar o status do POA.

Você pode se surpreender com o quão eficaz TAO pode ser, se usado corretamente. Sugiro criar uma simples prova de conceito e fazer medidas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top