импорт LoadLibrary
От: DenisovAA  
Дата: 17.10.07 08:58
Оценка:
Подскажите пожалуста кто знает почему не работает загрузка библиотеки в коде ниже(из последней ошибки получаю что модуль не найден)

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();
    }
}
Re: импорт LoadLibrary
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.10.07 09:15
Оценка:
Здравствуйте, DenisovAA, Вы писали:

Для исходного кода следует использовать теги.
... << RSDN@Home 1.2.0 alpha rev. 716>>
AVK Blog
Re: импорт LoadLibrary
От: SuhanovSergey  
Дата: 17.10.07 09:18
Оценка:
Здравствуйте, DenisovAA, Вы писали:

DAA>Подскажите пожалуста кто знает почему не работает загрузка библиотеки в коде ниже(из последней ошибки получаю что модуль не найден)


Вопрос водится к тому, почему LoadLibrary не находит модуль. На этот вопрос сложно ответить не зная о вашей структуре каталогов, и что откуда запускается.
Re: импорт LoadLibrary
От: niko_ Россия www.KGBSpy.ru
Дата: 17.10.07 09:57
Оценка: 3 (1)
Здравствуйте, 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;
        }
The truth is out there
Re[2]: импорт LoadLibrary
От: DenisovAA  
Дата: 17.10.07 10:51
Оценка:
Здравствуйте, niko_, Вы писали:


_>Вот, работает, не жалуюсь:


_>
_>        [DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
_>        private static extern IntPtr LoadLibraryEx([MarshalAs(UnmanagedType.LPTStr)] string lpLibFileName,
_>                                                   IntPtr hFile,
_>                                                   int dwFlags);

_>


Большое спасибо за ответ, ваш код прекрасно работает, буду использовать его.

Большое спасибо всем откликнувшимся.
Re: импорт LoadLibrary
От: DenisovAA  
Дата: 18.10.07 07:24
Оценка:
Ошибка в моём коде заключалась в отсутствии
CharSet = CharSet.Auto

Поэтому строки передавались как аnsi строки устанавлено по умолчанию
А должны были передаваться как установлено в системе (в NT это Unicode строки вот и не работало).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.