2010-09-20 7 views
2

Я пытаюсь использовать несколько функций из файла kernal32.dll. Однако, когда мое приложение пытается вызвать первую функцию он бросает EntryPointNotFoundException Unable to find an entry point named 'SetDllDirectory' in DLL 'kernel32.dll'.C# EntryPointNotFoundException Не удалось найти точку входа с именем 'SetDllDirectory' в DLL 'kernel32.dll'

public class MyClass 
{ 
    /// <summary> 
    /// Use to interface to kernel32.dll for dynamic loading of similar DLLs. 
    /// </summary> 
    internal static class UnsafeNativeMethods 
    { 
     [DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)] 
     internal static extern IntPtr LoadLibrary(string lpFileName); 

     [DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)] 
     internal static extern bool SetDllDirectory(string lpPathName); 

     [DllImport("kernel32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)] 
     internal static extern IntPtr GetProcAddress(IntPtr hModule, string procName); 
    } 

    private void MyFunc() 
    { 
     if (UnsafeNativeMethods.SetDllDirectory(_location) == false) // <-- Exception thrown here. 
     { 
      throw new FileNotFoundException(_location); 
     } 

     /* Some code. */ 

     _dllHandle = UnsafeNativeMethods.LoadLibrary(_fullPath); 

     /* Some more code. */ 

     _fptr = UnsafeNativeMethods.GetProcAddress(_dllHandle, _procName); 

     /* Yet even more code. */ 
    } 
} 

Любые мысли о том, что я делаю неправильно и как я могу заставить его работать было бы весьма признателен. Благодарю.

ответ

7

Вам нужно будет удалить свойство ExactSpelling. Реальное имя функции - SetDllDirectoryW. Я также рекомендую использовать CharSet.Auto, используя Ansi - это преобразование с потерями, которое может вызвать тонкие проблемы. Экспорт не доступен в любой версии Windows до XP SP1.

0

Не знаю много о DllImport, но на моей машине удаляется ExactSpelling атрибут, просто сделайте это.

Смежные вопросы