none
Erro ao importar na Linguagem C# uma Dll Feita em C++ RRS feed

  • Pergunta

  • E ae galera tudo bem ?
    Então, estou com um problema para realizar a importação da função de uma biblioteca e gostaria de uma ajudinha. É algo bem simples mas não estou conseguindo.

    O que acontece é o seguinte:
    Eu "fiz" uma Dll em C++ e estou querendo importar essa dll em programa escrito em C#

    Na dll (C++) eu utilizei um código mais ou menos como esse:

    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    using namespace std;

    void __declspec(dllexport) FazAlgumaCoisa(string comando)
    {
    algumaFuncaoQualquer(comando);
    }


    e no programa em C# eu estou fazendo mais ou menos isso pra importar a dll:
    using System;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;

    namespace dllImport
    {
            public static class PrimeiraClasse
            {
                [DllImport("dllTeste.dll")]
                public static extern void FazAlgumaCoisa(string comando);
            }


            private void executar_Click(object sender, EventArgs e) //Ao clicar em um botão
            {
               PrimeiraClasse.FazAlgumaCoisa(valorComando);  

            }
    }

    Quando eu executo o programa em C# que vai usar a dll é retornado o erro:
    Additional information: Foi feita uma tentativa de se carregar um programa com um formato incorreto. (Exceção de HRESULT: 0x8007000B)

    O código esta correto ? O que geralmente pode ocasionar isso ? Qual poderia ser a solução ?

    Havia pensado inicialmente que poderia ser algo relacionado a arquitetura x32 ou x64. Compilei dll nas duas arquiteturas, mas sem sucesso.

                           
    quinta-feira, 25 de abril de 2019 23:36

Todas as Respostas

  • Olá, amigo!

    Tente esta solucao:

    https://social.msdn.microsoft.com/Forums/pt-BR/216a765f-3082-4fd0-bdd7-b90707daa393/erro-dll-daruma


    “First do it, then do it right, then do it better.”

    sexta-feira, 26 de abril de 2019 00:17
  • wallacemariadeandrade Incrível, muito obrigado!! resolveu esse erro porém agora é retornado outro erro parecido com isso:

    Não é possivel localizar um ponto de entrada denominado "FazAlgumaCoisa" na DLL "dllTeste.dll"

    Tentei usar o "extern" também na dll pra ver se resolvia:

    extern "C" __declspec(dllexport) public static void FazAlgumaCoisa(string comando)
    {
    umaFuncaoQualquer(comando);
    }

    mas o erro persiste

    sexta-feira, 26 de abril de 2019 00:58
  • Importante ressaltar que para resolver o primeiro erro eu tive que setar o plataform target como x86 tanto na build da dll como na da aplicação que irá importar a dll.
    sexta-feira, 26 de abril de 2019 01:34
  • https://social.msdn.microsoft.com/Forums/pt-BR/fdf2f3d9-6217-4f79-a957-e41781c1dfc7/consumir-dll-feita-em-c?forum=vscsharppt

    https://ericlemes.com/2010/06/23/dotnet-interop-pt/

    veja se os links acima ajudam!


    “First do it, then do it right, then do it better.”

    sexta-feira, 26 de abril de 2019 02:01