| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Как вызвать не .NET функцию по указателю |
| Автор: stab 22.2.2003, 18:27 |
| [DllImport("kernel32", SetLastError=true)] static extern uint LoadLibrary(string name); [DllImport("kernel32", SetLastError=true)] static extern IntPtr GetProcAddress(uint hLib, string name); [DllImport("kernel32", SetLastError=true)] static extern bool FreeLibrary(uint hLib); ..... uint hLib = LoadLibrary("user32"); IntPtr ip = GetProcAddress(hLib, "MessageBoxA"); // и чего делать с ip не понятно FreeLibrary(hLib); может как-то можно засунуть в делигат? |
| Автор: AntonSaburov 25.2.2003, 18:42 |
| Я видел вот такой вариант - может он более интересен. Сначала можно сделать обертку internal class Wrapper { [DllImport("kernel32.dll")] public static extern int CreateFile(String lpFileName, uint dwDesiredAccess, uint dwShareMode, SecurityAttributes attr, uint dwCreationDisposition, uint dwFlagsAndAttributes, uint hTemplateFile); } А потом вызывать byte[] _numReadWritten = new byte[4]; byte[] intBytes = new byte[4]; byte[] msgBytes = null; int len; bool fOk = Wrapper.ReadFile(_handle, intBytes, 4, _numReadWritten, 0); if (fOk) { ... } |
| Автор: stab 27.2.2003, 18:40 |
| спасибо, но первый вариант от второго ни чем не отличается, мне нужно именно динамическое связывание. У мя старые DLL есть, каждая за свой формат файлов отвечает (как в ACDSee), заранее набор этих DLL не известен, т.е. надо делать LoadLibrary, GetProcAddress. Можно конечно каждую DLL завернуть в класс, но может и без этого обойтись можно? |
| Автор: AntonSaburov 27.2.2003, 19:00 |
| Насколько я понимаю идеологию NET - не получится. Надо написать COM-обертку вокруг DLL и вот ее уже можно динамически подключать. Хотя если вдруг найдется информация, что такое возможно - не скрывай такой радости для программистов |
| Автор: desyatnik 1.3.2003, 21:47 | ||
А может, попробовать использовать не COM, а unsafe-режим C#? Я в него не вникал, но что-то по манипуляции с указателями там есть. |
| Автор: stab 4.3.2003, 21:01 |
| Эх, манипуляции-то с указателями есть, а вот вызовов функций по указателям нет |
| Автор: AntonSaburov 4.3.2003, 21:14 |
| Я тоже посмотрел - нет там ничего такого. |
| Автор: simanyay 4.3.2003, 22:19 |
| В принципе я читал в одной книге, можно это сделать - но получиться такой гемор, что лучше даже не пробовать |
| Автор: stab 6.3.2003, 07:38 | ||||
не всех
что за книга? или хоть принцип? |
| Автор: simanyay 6.3.2003, 22:55 |
| Две книги - Переход на VB .NET (сразу скажу, книга не очень, хотя некоторые идеи ничего) И вторая, это... не помню названия - там на обложке разработчики нарисованы. Не моя просто была. |
| Автор: stab 9.3.2003, 23:34 |
| simanyay а что все-таки за принцип? |
| Автор: Мурлыкатам_ 6.7.2008, 02:30 |
| Внатуре, давайте капнем! |
| Автор: Voyager 7.7.2008, 13:58 |
| Давай. Только там капать особо не надо, объявляется делегат функции, через Marshal.GetDelegateForFunctionPointer идет его получение и вперед. |