Pergunta

Eu recentemente sido lutando com um algoritmo que foi mal implementada (ie o desenvolvedor foi retirado em outro projeto e não conseguiu documentar adequadamente o que tinha feito) em C #.

Eu encontrei uma alternativa (a partir de receitas numéricas), que funciona, mas é escrito em C ++. Então, eu estou pensando provavelmente a maneira mais segura de obter algo de trabalho seria para embrulhar o C ++ em uma DLL.

Tendo em conta que eu ainda sou um pouco verde quando se trata de C # e nunca tentou fazer uma DLL a partir do zero, isso soa como uma abordagem razoável (e em caso afirmativo, se alguém tentou isto / tem algum conselho) ? Ou devo ir o porco inteiro e tentar porta do C ++ rotina em C #?

Editar - Não estou procurando ninguém para tomar a decisão para mim, mas se alguém tem alguma exprience de qualquer rota que eu estaria interessado em ouvir as suas opiniões e as armadilhas desagradáveis ??que deveria ser evitado. Por exemplo, como desagradável está passando em listas de dados de C # para a C ++ vector STL?

Foi útil?

Solução

Eu tentei ligar para C-dll do c # código com resultados muito bons, embora eu tive alguns problemas para enviar dados entre os ambientes. Caso contrário, o procedimento é bastante simples. Quanto mais dados você envia e para trás (ambos quantidade e freqüência) o mais lento o seu programa será executado, mas você provavelmente já descobriram isso em seu próprio país.

A principal desvantagem foi a manutenção do c # -c código de cola (código de interface) cada vez que algo mudou ou alguém encontrou um bug.

Aqui está um pouco de código para você começar:

using System.Runtime.InteropServices;
    class myDllCaller {

       //call to function in the dll returning an int
      [DllImport("MyFavorite.dll")]
      private static extern int dllFunction(//list of parameters to function);

    public static void Main() {
    int rerult = dllFunction();

    }
}

Outras dicas

Se as referências C # versão Mitch não é de uma licença adequada para seus propósitos, você poderia usar um wrapper gerenciado C ++, que poderiam reutilizar, e envolva o código C que você tem, mas continua a ser visível para seus aplicativos gerenciados como um NET nativo montagem. Eu usei essa abordagem no passado para usar a API C de uma biblioteca que não tem a sua própria API Net nativa, e achei dados de triagem relativamente indolor entre os dois.

... Ou você pode baixar o código já implementado em C # a partir aqui .

Depende quais são seus objetivos.

Se é para ter um aplicativo de trabalho que eu pesar-se os custos e benefícios de ambas as abordagens e ir com o mais rentável.

Se é para melhorar o seu C #, em seguida, por todos os meios reescrever a C.

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