Форум Фотогалерея Деловой мир Мелитополя
Мелитополь
Мелитопольский форум
 
 RSS  FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Динамическое юзание DLL

 
Начать новую тему   Ответить на тему    Список форумов Мелитополь -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Maximus

Прохожий


Пол: Пол: Он
Зарегистрирован: 14.08.2005
Сообщения: 22

Репутация: 150.2

СообщениеДобавлено: Пн Окт 24, 2005 00:38 am    Заголовок сообщения: Динамическое юзание DLL Ответить с цитатой

Задача такова: нужна функция, на входе которой массив из переменных, а на выходе неизвестный резальт работы внешней функции. Никаких привязаностей, все максимально мобильно и независимо.
Например:
у меня есть длл, имя которой MyDLL.dll. Во время исполнения проги, мне нужна исполнить функцию SomeFunc(param1:integer;param2:string):boolean;
вопрос: как..?
просто вся фича в том, что заранее я не могу знать ни имени длл, ни имени, параметров и резальта функции...
...как я пытался это сделать...
1) LoadLibrary - апи функция, дает мене дескриптор проекции моей длл
2) GetProcAddress - тож апи, возвращает точку входа в функцию
3) ...тут то и запарка... нужен АСМ. - запихнуть то переменные я запихнул, но получить резальт типа VARIANT, не могу, так как размер еах 32, а варианта - 16.. че делать тута не знаю
Вернуться к началу
Посмотреть профиль Отправить личное сообщение  
Гость










СообщениеДобавлено: Пн Окт 24, 2005 15:06 pm    Заголовок сообщения: Ответить с цитатой

преобразование в асме PTR
указуешь к чему преобразовать и все..
к WORD - WORD PTR
к DWORD - DWORD PTR

или просто использовать ax вместо eax
Вернуться к началу
Maximus

Прохожий


Пол: Пол: Он
Зарегистрирован: 14.08.2005
Сообщения: 22

Репутация: 150.2

СообщениеДобавлено: Пн Окт 24, 2005 22:42 pm    Заголовок сообщения: Ответить с цитатой

...ээ ниче не выходит - всеранво операнд сайз мистматч...
напиши лучше код плиз..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение  
Гость










СообщениеДобавлено: Вт Окт 25, 2005 13:09 pm    Заголовок сообщения: Ответить с цитатой

Maximus писал(а):
...ээ ниче не выходит - всеранво операнд сайз мистматч...
напиши лучше код плиз..


ты покажи исходник, чтобы я имел хоть представление о том как ты написал
Вернуться к началу
Maximus

Прохожий


Пол: Пол: Он
Зарегистрирован: 14.08.2005
Сообщения: 22

Репутация: 150.2

СообщениеДобавлено: Вт Окт 25, 2005 13:45 pm    Заголовок сообщения: Ответить с цитатой

воть он:
Код:


function TForm1.Execute(params: array of const; libname,
  funcname: string): variant;
        function CallRemoteFunction(p:pointer;int1,int2:integer):variant;
        var
        v:variant;
        begin
               
                  asm
                push    int2               
                push    int1
                call    p;
                mov     [v],DWORD PTR eax // ---- ошибка  операнд сайз   
                                                          //  мистматч               
                  end;
        end;
var
l:Cardinal;
p:pointer;
begin
        l:=LoadLibrary(PChar(libname));
        p:=GetProcAddress(l,PChar(funcname));
        if p=nil then begin FreeLibrary(l); exit; end;
        result:=CallRemoteFunction(p,2,1);
        FreeLibrary(l);
end;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение  
Гость










СообщениеДобавлено: Вт Окт 25, 2005 17:02 pm    Заголовок сообщения: Ответить с цитатой

регистр преобразовывать нельзя - это ошибка
eax кажись должен быть 4-х байтовым
адрес тоже 4-х байтовый
ошибок поидее не должно быть

хотя попробуй
вот так:

Код:

mov esi,eax
mov [v],esi


а что должно быть в в eax после вызова функции?
Вернуться к началу
Maximus

Прохожий


Пол: Пол: Он
Зарегистрирован: 14.08.2005
Сообщения: 22

Репутация: 150.2

СообщениеДобавлено: Вт Окт 25, 2005 22:32 pm    Заголовок сообщения: Ответить с цитатой

неа.. не выходит...
короче что в еах.. точно не известно - на крайняк тама должно быть 16 байт - размер типа VARIANT.
моя задача написать функцию, на входе которой параметры, имя библиотеки и функции, а на выходе результат удаленной фунции. и не должно не зависить не от типа параметров, ни от резальта библиотечной функции. как это сделать..?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение  
Гость










СообщениеДобавлено: Ср Окт 26, 2005 17:10 pm    Заголовок сообщения: Ответить с цитатой

результатом может быть любое число поидее.. или адрес
ты точно знаешь что результат именно в eax?

запись mov [v],eax
означает что ты заносишь значение eax в ячейку памяти с адресом в v
тебе точно так нужно делать?

вот так пробовал?
mov WORD PTR v,eax?
Вернуться к началу
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Мелитополь -> Программирование Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Р: 537412

База отдыха «Белый парус» пгт Кирилловка Азовское море.

Рейтинг Мелитопольских сайтов на Melitopol.org Hosting by VivaNET