Подскажите пожалуста кто знает почему не работает загрузка библиотеки в коде ниже(из последней ошибки получаю что модуль не найден)
IntPtr library = Win32Api.kernel32.LoadLibrary("LinkLibrary.dll");
int error = Win32Api.kernel32.GetLastError();
Delegate proc = Win32Api.kernel32.GetProcAddress(library, "Hook");
IntPtr hook = Win32Api.user32.SetWindowsHookEx(5, proc, library, 0);
namespace Win32Api
{
public static class user32
{
[DllImport("user32.dll")]
public static extern IntPtr SetWindowsHookEx(
int idHook,
[MarshalAs(UnmanagedType.FunctionPtr)]Delegate lpfn,
IntPtr hMod,
int dwThreadId);
}
public static class kernel32
{
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(
[MarshalAs(UnmanagedType.LPWStr)]string lpFileName);
[DllImport("kernel32.dll")]
public static extern Delegate GetProcAddress(
IntPtr hModule,
[MarshalAs(UnmanagedType.LPWStr)]string lpProcName);
[DllImport("kernel32.dll")]
public static extern int GetLastError();
}
}
Здравствуйте, DenisovAA, Вы писали:
Для исходного кода следует использовать теги.
... << RSDN@Home 1.2.0 alpha rev. 716>>
Здравствуйте, DenisovAA, Вы писали:
DAA>Подскажите пожалуста кто знает почему не работает загрузка библиотеки в коде ниже(из последней ошибки получаю что модуль не найден)
DAA> . . . . .
Вот, работает, не жалуюсь:
[DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr LoadLibraryEx([MarshalAs(UnmanagedType.LPTStr)] string lpLibFileName,
IntPtr hFile,
int dwFlags);
public static IntPtr LoadLibrary(string libraryFile)
{
IntPtr hLibrary = IntPtr.Zero;
try
{
hLibrary = LoadLibraryEx(libraryFile, IntPtr.Zero, 0);
if (hLibrary == IntPtr.Zero) throw new Win32Exception();
}
catch (Win32Exception _err)
{
MessageBox.Show("Не удалось загдузить '" + libraryFile + "': " + _err.Message);
}
return hLibrary;
}
Здравствуйте, niko_, Вы писали:
_>Вот, работает, не жалуюсь:
_>_> [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
_> private static extern IntPtr LoadLibraryEx([MarshalAs(UnmanagedType.LPTStr)] string lpLibFileName,
_> IntPtr hFile,
_> int dwFlags);
_>
Большое спасибо за ответ, ваш код прекрасно работает, буду использовать его.
Большое спасибо всем откликнувшимся.
Ошибка в моём коде заключалась в отсутствии
CharSet = CharSet.Auto
Поэтому строки передавались как аnsi строки устанавлено по умолчанию
А должны были передаваться как установлено в системе (в NT это Unicode строки вот и не работало).