Pergunta

Eu li (no livro de Nish Sivakumar C ++ / CLI In Action entre outros lugares) que você deve usar o decorador __clrcall em chamadas de função para evitar a dupla-thunking, nos casos em que você sabe que o método nunca será chamado a partir do código não gerenciado. Nish também diz que se a assinatura do método contém quaisquer tipos CLR, em seguida, o compilador JIT irá adicionar automaticamente o __clrcall. O que não está claro para mim é se eu preciso incluir __clrcall quando eu crio C Propriedades ++ / CLI. Em certo sentido, as propriedades são acessíveis apenas a partir de linguagens .NET, por outro lado, o C ++ / compilador CLI (eu acho) apenas gera métodos (por exemplo *** _ get ()), que podem ser chamados tanto código gerenciado e não gerenciado. Então eu preciso para usar o modificador __clrcall em minhas propriedades, e em caso afirmativo, para onde vai? Na get / set próprias funções?

Foi útil?

Solução

@ Mike B - Obrigado pela dica sobre ildasm -. Eu não sabia sobre essa ferramenta

Parece que eu mal interpretado / incompreendido Nish - o modificador __clrcall eo problema duplo thunking só elimina aplica a métodos de classes nativas. Todos os métodos de classes gerenciados são __clrcall por padrão -. O que parece óbvio em retrospecto

O livro de Evidentemente Marcus Heege Especialista C ++ / CLI está disponível como um download livre, e tem uma boa tabela na página 215 que resume as convenções de chamada.

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