Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вызвать не .NET функцию по указателю, ? 
:(
    Опции темы
stab
Дата 22.2.2003, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 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.
PM MAIL WWW   Вверх
AntonSaburov
Дата 25.2.2003, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 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)
{
...
}
PM MAIL WWW ICQ   Вверх
stab
Дата 27.2.2003, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



спасибо, но первый вариант от второго ни чем не отличается, мне нужно именно динамическое связывание. У мя старые DLL есть, каждая за свой формат файлов отвечает (как в ACDSee), заранее набор этих DLL не известен, т.е. надо делать LoadLibrary, GetProcAddress. Можно конечно каждую DLL завернуть в класс, но может и без этого обойтись можно?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
AntonSaburov
Дата 27.2.2003, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 118



Насколько я понимаю идеологию NET - не получится.
Надо написать COM-обертку вокруг DLL и вот ее уже можно динамически подключать.

Хотя если вдруг найдется информация, что такое возможно - не скрывай такой радости для программистов smile.gif
PM MAIL WWW ICQ   Вверх
desyatnik
Дата 1.3.2003, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 13.8.2002
Где: Мичуринск

Репутация: нет
Всего: нет



Цитата(AntonSaburov @ 27.2.2003, 19:00)
Насколько я понимаю идеологию NET - не получится.
Надо написать COM-обертку вокруг DLL и вот ее уже можно динамически подключать.

А может, попробовать использовать не COM, а unsafe-режим C#? Я в него не вникал, но что-то по манипуляции с указателями там есть.
--------------------
WBR, Dejrgris
PM MAIL WWW ICQ   Вверх
stab
Дата 4.3.2003, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Эх, манипуляции-то с указателями есть, а вот вызовов функций по указателям нет sad.gif


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
AntonSaburov
Дата 4.3.2003, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 118



Я тоже посмотрел - нет там ничего такого.
PM MAIL WWW ICQ   Вверх
simanyay
Дата 4.3.2003, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


Профиль
Группа: Участник
Сообщений: 2053
Регистрация: 22.8.2002

Репутация: нет
Всего: 36



В принципе я читал в одной книге, можно это сделать - но получиться такой гемор, что лучше даже не пробовать sad.gif Там описываются ТАКИЕ ухищрения, что, я считаю, лучше написать всё по новой... А исходники библиотек есть?


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
stab
Дата 6.3.2003, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



Цитата
А исходники библиотек есть?


не всех

Цитата
В принципе я читал в одной книге ...


что за книга? или хоть принцип?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
simanyay
Дата 6.3.2003, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


Профиль
Группа: Участник
Сообщений: 2053
Регистрация: 22.8.2002

Репутация: нет
Всего: 36



Две книги - Переход на VB .NET (сразу скажу, книга не очень, хотя некоторые идеи ничего)

И вторая, это... не помню названия - там на обложке разработчики нарисованы. Не моя просто была.


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
stab
Дата 9.3.2003, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



simanyay а что все-таки за принцип? smile.gif


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Мурлыкатам_
Дата 6.7.2008, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



Внатуре, давайте капнем!


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
Voyager
Дата 7.7.2008, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: 3
Всего: 18



Давай. smile
Только там капать особо не надо, объявляется делегат функции, через Marshal.GetDelegateForFunctionPointer идет его получение и вперед.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.