Результат функции из внешней библиотеки

Обсуждение программ nnCron и nnCron LITE

Результат функции из внешней библиотеки

Postby dad1969 » Tue, 21 Dec 2004, 00:27

Добрый день. Я пытаюсь разобраться со взамодействием nnCron с внешними библиотеками. Написал в Delphi простенькую библиотеку с пока единственной функцией - вызова окна ввода
Code: Select all
function MyMsg(aDef: PChar): PChar; stdcall;
begin
  Result:=PChar(InputBox('Caption','Prompt',String(aDef)));
end;

Как передать значение aDef из скрипта я разобрался. А вот с получением результата возникли проблемы.
Code: Select all
WINAPI: MyMsg MSGEXT.DLL
CREATE m_def 256 ALLOT
Action:
  S" Input something" m_def PLACE
  m_def COUNT SWAP MyMsg ...
  MSG: "..."

На сколько я понимаю переменная для результата должна идти после имени функции. Но вот что там надо написать, и как потом обратиться к результату из, например, MSG я пока не разобрался. Что в данном случае можете подсказать?
User avatar
dad1969
 
Posts: 38
Joined: Sun, 12 Sep 2004, 12:53

Postby VK » Tue, 21 Dec 2004, 14:52

В описании слова WINAPI: есть пример с выводом возвращаемого значения в сообщении.
http://www.nncron.ru/help/RU/commands/misc.htm#WINAPI
Что непонятно?
CU
VK
User avatar
VK
 
Posts: 680
Joined: Wed, 14 Jul 2004, 19:17

Postby dad1969 » Tue, 21 Dec 2004, 15:14

Ну, вообще-то разница есть. В примере, который я разумеется видел, результат возвращается по тому же самому адресу, что и передаваемое значение. Вопрос в том что делать в моем случае.
User avatar
dad1969
 
Posts: 38
Joined: Sun, 12 Sep 2004, 12:53

Postby VK » Tue, 21 Dec 2004, 15:25

ну, так и в чем проблема?

Code: Select all
WINAPI: MyMsg MSGEXT.DLL
CREATE m_def 256 ALLOT
Action:
  S" Input something" m_def PLACE
  m_def COUNT SWAP MyMsg m_def PLACE
  MSG: "%m_def COUNT%"


ну, или:

Code: Select all
WINAPI: MyMsg MSGEXT.DLL
CREATE m_def 256 ALLOT
CREATE m_def1 256 ALLOT
Action:
  S" Input something" m_def PLACE
  m_def COUNT SWAP MyMsg m_def1 PLACE
  MSG: "%m_def1 COUNT%"
CU
VK
User avatar
VK
 
Posts: 680
Joined: Wed, 14 Jul 2004, 19:17

Postby dad1969 » Tue, 21 Dec 2004, 22:32

Проблема в том что на этот код (на оба варианта) выдается внутренняя ошибка #-1073741819. Версия nnCron 1.89 Build 997 20.05.2004.
User avatar
dad1969
 
Posts: 38
Joined: Sun, 12 Sep 2004, 12:53

Postby Valery_Kondakoff » Tue, 21 Dec 2004, 22:37

два варианта:

- либо длл возвращает не то, что рассчитывает nnCron
- либо ты передаешь в длл не те параметры.

(я в делфи ничего не понимаю)

Пример из хелпа работает?
CU
VK
User avatar
Valery_Kondakoff
Site Admin
 
Posts: 769
Joined: Thu, 01 Jul 2004, 20:49
Location: Moscow, Russia

Postby dad1969 » Wed, 22 Dec 2004, 02:45

Из хелпа работает. И в dll все передается нормально - передаваемая строка из m_def отображается корректно. Собственно там проблеме негде взяться - функция всего лишь показывает окно с полем ввода в котором по-умолчанию отображается передаваемая строка. Вернее передается ее адрес. И обратно возвращается тоже адрес. Поэтому у меня как раз вызывает сомнения корректность m_def1 PLACE. Но я со своей стороны пока еще ничего не понимаю в Форте. :wink:
User avatar
dad1969
 
Posts: 38
Joined: Sun, 12 Sep 2004, 12:53

Postby Valery_Kondakoff » Wed, 22 Dec 2004, 09:21

а... так бы сразу и написал, что возвращается не сама строка, а ее адрес...

примерно так (если возвращается строка с нулем на конце):

Code: Select all
WINAPI: MyMsg MSGEXT.DLL
CREATE m_def 256 ALLOT
0 str_address VALUE
Action:
  S" Input something" m_def PLACE
  m_def COUNT SWAP MyMsg TO str_address
  MSG: "%str_address ASCIIZ>%"
CU
VK
User avatar
Valery_Kondakoff
Site Admin
 
Posts: 769
Joined: Thu, 01 Jul 2004, 20:49
Location: Moscow, Russia

Postby dad1969 » Wed, 22 Dec 2004, 15:01

OK, спасибо. Все работает, только маленькая поправка:
Code: Select all
0 VALUE str_address
и
Code: Select all
m_def COUNT SWAP MyMsg TO str_address DROP
.
User avatar
dad1969
 
Posts: 38
Joined: Sun, 12 Sep 2004, 12:53


Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Bing [Bot], Yahoo [Bot] and 1 guest