powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с передачей параметров в DLL
5 сообщений из 5, страница 1 из 1
Проблема с передачей параметров в DLL
    #32840209
Val_E
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возникла проблема с использованием библиотеки dll.
Функциям из библиотеки в качестве одного из параметров передается функция из вызывающей программы, эту функцию вызывает библиотека после выполнения команды.
И передает в нее результат работы в структуре rtd.
На Delphi это выглядит так:

TMathFunc = procedure(const rt:RetData)stdcall;
procedure PrinterResults(const rt:RetData)stdcall;
function DisplayTextLL(hWin:HWND;fun:TMathFunc;par:LPARAM;int1:STRING):integer;stdcall ; external 'fpl.dll' name 'DisplayTextLL';

//Формат структура rtd:
type RetData = record
Count: integer ;
CmdCode: integer ;
UserData: integer ;
Status: integer ;
CmdName: PChar ;
SendStr: PChar ;
Whole: PChar ;
RetItem: array [1..20] of PChar ;
OrigStat: array [1..6] of byte ;
end;

procedure PrinterResults(const rt:RetData )stdcall;
begin
………………
………………
………………
end ;
procedure TForm1.Button1Click(Sender: TObject);
begin
DisplayTextLL(0,PrinterResults,0,’Текст……….');

end;

Как такое сделать на FoxPro
...
Рейтинг: 0 / 0
Проблема с передачей параметров в DLL
    #32840550
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Val_E!

Напрфмую - никак. Фокс не поддерживает Callback-вызовы. Пиши не простую dll,
а dll с использованием FoxAPI - там можно через _Execute() или _Evaluate()
вызвать любую фоксовую функцию. Описание FoxAPI имеется в хелпе фокса.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Проблема с передачей параметров в DLL
    #32840745
-ноль-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там вроде мы в описании _Execute() и _Evaluate() микрософт просит , чтобы их не вызывали в обработчиках событий.
Я пробовал делать вызов фоксовской функции через _Execute() и _Evaluate() , работает, но временами валится. ДА и с передачей параметров при вызове не очень удобно. Допустим если нужно передать в качетсве параметра значение переменной , то всю строку с именем функции нужно формировать руками, а уже потом подсовывать ее в качетсве аргумента для _Execute().
Можно сделать по другому. Создать в фоксе COM объект, описать там класс с одной функцией. Потом соответсвенно в библиотеке FLL или DLL
сделать # import, получить указатель на интерфейс класса и в потоке вызывать его. Тогда и с параметрами попроще, можно любые педевать. И поздним связыванием можно свзяать с фоксовским классом.
...
Рейтинг: 0 / 0
Проблема с передачей параметров в DLL
    #32840925
Val_E
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напрфмую - никак

Жаль. Придется что-то придумывать, или писать на чем-то другом.
Спасибо что подсказали куда копать.
...
Рейтинг: 0 / 0
Проблема с передачей параметров в DLL
    #32848746
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi -ноль-!

Там вообще много вопросов - например как я понял, изначально это
многопоточный компонент, а вызвать _Execute из разных потоков IMHO нельзя...
Если же это "синхронный" метод - то вообще нету смысле чего-то вызывать "в
конце". А если асинхронный - ну тогда надо проверять - будет ли оно вообще
работать - не заблокирует ли фокс такой вызов...

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с передачей параметров в DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]