Como chamar uma biblioteca C # do C ++ nativo (usando C ++ \ CLI e IJW)

Fundo: Como parte de uma atribuição maior, preciso tornar uma biblioteca C # acessível ao código C ++ e C não gerenciado. Em uma tentativa de responder a essa pergunta eu tenho aprendido C ++ / CLI nos últimos dias / semanas.

Parece haver várias maneiras diferentes de usar uma DLL C # de C ++ e C. não gerenciados. Algumas das respostas resumidas parecem ser: usando serviços Interlope, Usando .com. e regasm, usando PInvoke (que parece ir de C # para C ++ somente), e usando IJW no C ++ / CLR (que parece ser serviços de Interlope). Eu estou pensando que seria melhor configurar uma biblioteca que é talvez um wrapper CLR que usa o IJW para chamar meu c # dll em nome do C ++ nativo e código C.

Especificidades: Eu preciso passar valores de seqüência de caracteres, bem como int para uma c # dll do código c + + e retornar void.

Relevância: Muitas empresas têm muitas desculpas para misturar e combinar C ++, C e C #. Desempenho: o código não gerenciado geralmente é mais rápido, interfaces: as interfaces gerenciadas geralmente são mais fáceis de manter, implantar e geralmente são mais fáceis para os olhos, dizem os gerentes também. O código legado nos força também. Estava lá (como a montanha que subimos). Enquanto exemplos de como chamar uma biblioteca C ++ de C # são abundantes. Exemplos de como chamar bibliotecas C # do código C ++ são difíceis de encontrar através do Googling, especialmente se você quiser ver o código 4.0+ atualizado.

Programas: C #, C ++ / CLR, C ++, C, Visual Studio 2010 e .NET 4.0

Detalhes da pergunta: Pergunta multiparte OK:

Existe uma vantagem em usar objetos com? Ou o PInvoke? Ou algum outro método? (Sinto que a curva de aprendizado aqui será tão íngreme, embora eu encontre mais informações sobre o tópico no Google Land. O IJW parece prometer o que eu quero fazer. Devo desistir de procurar uma solução IJW e focar nisso em vez disso?) (Vantagem / desvantagem?)

Estou correto em imaginar que existe uma solução onde eu escrevo um wrapper que utiliza o IJW no C ++ / CLR? Onde posso encontrar mais informações sobre esse tópico, e não digo que eu não sou o suficiente do Google / ou consulte o MSDN sem me informar onde você o viu. (Acho que prefiro essa opção, no esforço de escrever um código claro e simples.)

Um estreitamento do escopo da pergunta: Sinto que meu verdadeiro problema e necessidade está respondendo à pergunta menor que segue: Como configuro uma biblioteca C ++ / CLR que um arquivo C ++ não gerenciado pode usar no Visual Studio. Eu acho que se eu pudesse simplesmente instanciar uma classe C ++ gerenciada em código C ++ não gerenciado, então eu poderia conseguir o resto (interface e quebra automática etc.). Espero que minha principal loucura esteja em tentar configurar referências / # includes etc. no Visual Studio, pensei claramente que poderia ter outros equívocos. Talvez a resposta para essa coisa toda possa ser apenas um link para um tutorial ou instruções que me ajudem com isso.

Pesquisa: Eu tenho Googled e Binged mais e mais com algum sucesso. Eu encontrei muitos links que mostram como usar uma biblioteca não gerenciada do código C #. E eu admito que tem havido alguns links que mostram como fazê-lo usando objetos. Não muitos resultados foram direcionados ao VS 2010.

Referências: Eu li muitas e muitas postagens. Eu tentei trabalhar com os mais relevantes. Alguns parecem tentadoramente próximos da resposta, mas eu simplesmente não consigo fazê-los funcionar. Eu suspeito que a coisa que estou perdendo é tentadoramente pequena, como usar indevidamente a palavra-chave ref, ou perder uma declaração #include ou using, ou um mau uso do namespace, ou não usar o recurso IJW corretamente, ou perder uma configuração que o VS precisa lidar com a compilação corretamente, etc. Então você se pergunta, por que não incluir o código? Bem, sinto que não estou em um lugar onde entendo e espero que o código tenha que funcionar. Eu quero estar em um lugar onde eu entenda, quando eu chegar lá talvez precise de ajuda para consertar isso. Vou incluir aleatoriamente dois dos links, mas não tenho permissão para mostrar todos eles no meu nível de ponto de vida atual.

http://www.codeproject.com/Articles/35437/Moving-Data-between-Managed-Code-and-Unmanaged-Cod

Isso chama código de código gerenciado e não gerenciado em ambas as direções, indo de C ++ para Visual Basic e de volta via C ++ CLR, e é claro que estou interessado em C # .:http://www.codeproject.com/Articles/9903/Calling-Managed-Code-from-Unmanaged-Code-and-vice

questionAnswers(6)

yourAnswerToTheQuestion