O lançamento de um diálogo C # a partir de um não gerenciado C ++ mfc ativo x dll

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho dito para escrever um diálogo em C # que deve ser instanciado a partir de um c não gerenciado ++ dll. Fazemos isso em outros lugares em nosso código simplesmente adicionando uma classe Managed C ++ para o projeto C ++, em seguida, chamar o C # dll da classe C ++ gerenciado. No entanto eu estou achando que não funciona para mim, de onde eu tenho que fazê-lo. Acho que é porque a dll c ++ é um projeto MFCActiveX. Assim que eu definir o clr em qualquer arquivo no projeto, que deixará de registrar corretamente. Quando eu tentar registrá-lo, eu recebo três erros, em seguida, uma mensagem que ele registrado. No entanto, quando eu tento usá-lo eu recebo um erro de "classe ClassFactory não pode fornecer solicitado" 0x80040111. Se alguém tiver alguma idéia de qual é o problema aqui eu agradeceria muito. Ou eu preciso ser capaz de fazer isso (preferencial) ou provar que não é possível.

Graças

Foi útil?

Solução

Não consigo ver como um projeto MFCActiveX iria impedi-lo de criar a classe C # desta forma. A não ser que ele simplesmente não permite uma classe gerenciada a ser adicionado.

Se você não pode obter truque classe C ++ gerenciado para o trabalho, outra opção é usar COM. É possível registar uma fábrica das sortes no projeto C # como um objeto COM. Say dar-lhe a seguinte interface

[ComVisible(true)]
[Guid("babe87fc-1467-4913-a1d3-47eeedf1afb5")]
public interface IDialogFactory {
  void Create(); 
}

Você também teria que criar uma classe de apoio também. Mas, então, você poderia registrar o COM conseguiu montagem e utilização de acessá-lo.

Outras dicas

Você agora deve registrá-lo com "regasm" em vez de "regsvr32".

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