Pergunta

Temos código nativo Win32 C ++ e um conjunto de conjuntos de C # que queremos chamar a partir do código C ++. I resume nossos optios como:

  1. Use COM. O código C # teriam de ser decorado com atributos adicionais (Guid, ComVisible). Os C # montagens precisaria ser registrado regasm e seria, então, disponível para o C ++ nativo código via COM.

  2. Use a C ++ / CLI (anteriormente gerido C ++) invólucro de classe. Uma classe C ++ pode ser adicionado ao projecto nativo C ++. Essa classe seria compilado com / clr. O código nativo C ++ iria chamar a classe ++ / CLI C, que passaria a chamar o código .Net. No COM envolvidos. O CLR é iniciado por magia como necessário com triagem tratado por ++ / extenstions CLI do C.

  3. hospedeiro de uma instância da CLR no código nativo C ++.

Vou opção desconto de 3 para que eu não ver os benefícios sobre a opção 2 que não perdemos a necessidade de uma classe wrapper. Então a questão é, quais são as vantagens / desvantagens da opção 1 contra a opção 2?

Agradecemos antecipadamente.

Foi útil?

Solução

Opção 2 irá executar o melhor, e ser o mais transparente e sustentável, IMO.

Não há realmente nenhuma vantagem para a opção 1 que eu encontrei. Usando C ++ / CLI parece funcionar muito melhor, trabalhar mais rápido, e ser muito mais simples em geral.

Você também pode, aliás, é só usar o C # montagem diretamente sem ter uma classe wrapper. Isso exige compilar todos os arquivos que deseja usá-lo com / CLR, mas funciona muito bem.

Outras dicas

Para a opção 1 seu pro principal seria não ter que escrever uma classe wrapper que pode se complicar dependendo do seu projeto.

Para a opção 2, você não terá que modificar a sua biblioteca gerenciada para facilitar o uso não gerenciado, que às vezes não é uma opção.

Para mim se trata de onde você quiser fazer as suas alterações no código.

Com a opção 2 você também tem uma maneira bastante simples de posteriormente converter seu aplicativo inteiro para C ++ / CLI para evitar as transições gerenciado / que você vai obter. As transições poderia ser um problema, dependendo de como você usa seus assemblies referenciados ou seja, conseguir um acerto de desempenho.

Até agora eu ter tido apenas experiências positivas com C ++ / CLI e pode recomendar ir por esse caminho.

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