none
Uso da System.Runtime.InteropServices RRS feed

  • Pergunta

  • Pessoal,

    Tenho uma pergunta que eu creio que seja bem básica, pois existem muitos tutoriais na net de como fazer isso, porém nenhum deles responde minha dúvida...

    Quando uso o atributo DllImport de System.Runtime.InteropServices, qual deve ser a localização da dll a que faço referência, tem que estar em alguma pasta do meu projeto?

    Valeu!

    []´s
    quinta-feira, 2 de outubro de 2008 14:38

Respostas

  • Olá,

     

    Quando você utiliza uma DLL externa via DllImport, o .NET chama uma API do Windows chamada LoadLibrary, e essa API é responsável por "localizar" a sua DLL naquele computador e carregá-la em memória...

     

    Essa LoadLibrary, procura em diferentes lugares, e segue uma certa ordem, mas garantidamente, você sabe que ela procura nos seguintes lugares:

    1. No diretório onde está o executável da aplicação
    2. No diretório padrão do sistema (normalmente, C:\Windows\System32)
    3. No diretório padrão onde está instalado o Windows (normalmente, C:\Windows)
    4. No diretório a partir de onde a aplicação foi executada (working folder)
    5. Em todos os diretórios definidos na variável de sistema PATH (

      Environment.GetEnvironmentVariable("Path"))

    Dessa forma, se a sua DLL estiver em qualquer um dos lugares acima, ela será encontrada, e será executada...

     

    O que você deve se preocupar, entretanto, é se existem diferentes versões da mesma DLL (mesmo nome de arquivo) em mais de um dos lugares acima, porque o DllImport vai executar a primeira que encontrar, seguindo a ordem de procura. Wink

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    quinta-feira, 2 de outubro de 2008 16:19

Todas as Respostas

  • Olá,

     

    Quando você utiliza uma DLL externa via DllImport, o .NET chama uma API do Windows chamada LoadLibrary, e essa API é responsável por "localizar" a sua DLL naquele computador e carregá-la em memória...

     

    Essa LoadLibrary, procura em diferentes lugares, e segue uma certa ordem, mas garantidamente, você sabe que ela procura nos seguintes lugares:

    1. No diretório onde está o executável da aplicação
    2. No diretório padrão do sistema (normalmente, C:\Windows\System32)
    3. No diretório padrão onde está instalado o Windows (normalmente, C:\Windows)
    4. No diretório a partir de onde a aplicação foi executada (working folder)
    5. Em todos os diretórios definidos na variável de sistema PATH (

      Environment.GetEnvironmentVariable("Path"))

    Dessa forma, se a sua DLL estiver em qualquer um dos lugares acima, ela será encontrada, e será executada...

     

    O que você deve se preocupar, entretanto, é se existem diferentes versões da mesma DLL (mesmo nome de arquivo) em mais de um dos lugares acima, porque o DllImport vai executar a primeira que encontrar, seguindo a ordem de procura. Wink

     

    Abraços,

    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    quinta-feira, 2 de outubro de 2008 16:19
  • Muito completa sua informação, Caio.

    Obrigado!!!
    sexta-feira, 3 de outubro de 2008 00:50