Como hospedar controles .Net licenciados em aplicativos C++ não gerenciados?
Pergunta
Preciso hospedar e executar controles gerenciados dentro de um aplicativo C++ puramente não gerenciado.Como fazer isso?
Executar controles não licenciados normalmente é simples:
if (SUCCEEDED(ClrCreateManagedInstance(type, iid, &obj)))
{
// do something with obj
}
Ao usar um controle licenciado, entretanto, precisamos incorporar de alguma forma um arquivo .licx no projeto (ref. licenciamento de aplicativos).Em um aplicativo C++ não gerenciado, a cola necessária parece não funcionar.A ferramenta lc.exe deveria ser capaz de incorporar a licença como um recurso de montagem, mas ou não estávamos realizando a invocação correta ou ela falhou silenciosamente.Qualquer ajuda seria apreciada.
Solução
A resposta depende do componente específico que você está usando.Entre em contato com o suporte técnico do seu componente OU leia a documentação sobre o que é necessário para implantar seu componente.
Basicamente, os desenvolvedores de componentes são livres para implementar o licenciamento como eles acharem adequado.Com o arquivo .licx o componente precisa ser capaz de fazer o que o desenvolvedor desejar via GetKey e IsValidKey (explicado no link que você postou).Portanto, se GetKey verificar um arquivo .licx no diretório do componente - você só precisa ter certeza de que ele está lá.
AFAIK, o assembly do cliente não precisa fazer nada, exceto instanciar o controle.
Além disso, se você postar o nome do componente e o comando lc.exe que está usando, as pessoas poderão dar uma olhada.