![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
[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); может как-то можно засунуть в делигат? -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 6 Всего: 118 |
Я видел вот такой вариант - может он более интересен.
Сначала можно сделать обертку 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 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
спасибо, но первый вариант от второго ни чем не отличается, мне нужно именно динамическое связывание. У мя старые DLL есть, каждая за свой формат файлов отвечает (как в ACDSee), заранее набор этих DLL не известен, т.е. надо делать LoadLibrary, GetProcAddress. Можно конечно каждую DLL завернуть в класс, но может и без этого обойтись можно?
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 6 Всего: 118 |
Насколько я понимаю идеологию NET - не получится.
Надо написать COM-обертку вокруг DLL и вот ее уже можно динамически подключать. Хотя если вдруг найдется информация, что такое возможно - не скрывай такой радости для программистов |
|||
|
||||
| desyatnik |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 13.8.2002 Где: Мичуринск Репутация: нет Всего: нет |
А может, попробовать использовать не COM, а unsafe-режим C#? Я в него не вникал, но что-то по манипуляции с указателями там есть. --------------------
WBR, Dejrgris |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
Эх, манипуляции-то с указателями есть, а вот вызовов функций по указателям нет
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 6 Всего: 118 |
Я тоже посмотрел - нет там ничего такого.
|
|||
|
||||
| simanyay |
|
|||
![]() Антон Ковалёв ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: нет Всего: 36 |
В принципе я читал в одной книге, можно это сделать - но получиться такой гемор, что лучше даже не пробовать
-------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
| stab |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
не всех
что за книга? или хоть принцип? -------------------- 6, 6, 6 - the number of the beast. |
||||
|
|||||
| simanyay |
|
|||
![]() Антон Ковалёв ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2053 Регистрация: 22.8.2002 Репутация: нет Всего: 36 |
Две книги - Переход на VB .NET (сразу скажу, книга не очень, хотя некоторые идеи ничего)
И вторая, это... не помню названия - там на обложке разработчики нарисованы. Не моя просто была. -------------------- «It's better to be a pirate than to join the Navy» — Steve Jobs. |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
simanyay а что все-таки за принцип?
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| Мурлыкатам_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 5.2.2007 Где: город-герой Минск Репутация: нет Всего: 2 |
Внатуре, давайте капнем!
|
|||
|
||||
| Voyager |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 8.2.2005 Репутация: 3 Всего: 18 |
Давай.
Только там капать особо не надо, объявляется делегат функции, через Marshal.GetDelegateForFunctionPointer идет его получение и вперед. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |