powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / WEBUTIL_C_API / Forms10
7 сообщений из 7, страница 1 из 1
WEBUTIL_C_API / Forms10
    #36920765
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Основная задача связана с выводом в Excel (это получилось), но, судя по всему, при задании формата ячейки он использует установки ОС и их нужно как-то получить. Пытаюсь воспользоваться пакетом WEBUTIL_C_API для вызова KERNEL32.GetLocaleInfoA.
В результате падает java-ашина.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
declare
  MSG_L    VARCHAR2( 30 ) := 'Hello'  || CHR( 0 );
  HDR_L    VARCHAR2( 30 ) := 'Header' || CHR( 0 );

  INFO_L   VARCHAR2( 10 ) := '0123456789';
  
  ARGS_L   WEBUTIL_C_API.PARAMETERLIST;
  PARM_L   WEBUTIL_C_API.PARAMETERHANDLE; 
  RESULT_L PLS_INTEGER;

begin
  ARGS_L   := WEBUTIL_C_API.CREATE_PARAMETER_LIST;

  PARM_L   := WEBUTIL_C_API.ADD_PARAMETER(ARGS_L, WEBUTIL_C_API.C_INT,      WEBUTIL_C_API.PARAM_IN,  0 );                      -- hWnd
  PARM_L   := WEBUTIL_C_API.ADD_PARAMETER(ARGS_L, WEBUTIL_C_API.C_CHAR_PTR, WEBUTIL_C_API.PARAM_IN, MSG_L,  LENGTH(MSG_L));  -- lpText
  PARM_L   := WEBUTIL_C_API.ADD_PARAMETER(ARGS_L, WEBUTIL_C_API.C_CHAR_PTR, WEBUTIL_C_API.PARAM_IN, HDR_L,  LENGTH(HDR_L));  -- lpCaption
  PARM_L   := WEBUTIL_C_API.ADD_PARAMETER(ARGS_L, WEBUTIL_C_API.C_INT,      WEBUTIL_C_API.PARAM_IN,  0 );                      -- uType (MB_OK)

  RESULT_L := WEBUTIL_C_API.INVOKE_INT('user32.dll', 'MessageBoxA', ARGS_L);

  WEBUTIL_C_API.DESTROY_PARAMETER_LIST(ARGS_L);

/*ARGS_L   := WEBUTIL_C_API.CREATE_PARAMETER_LIST;

  PARM_L   := WEBUTIL_C_API.ADD_PARAMETER(ARGS_L, WEBUTIL_C_API.C_INT,      WEBUTIL_C_API.PARAM_IN, 1024);                   -- Locale (LOCALE_USER_DEFAULT)
  PARM_L   := WEBUTIL_C_API.ADD_PARAMETER(ARGS_L, WEBUTIL_C_API.C_INT,      WEBUTIL_C_API.PARAM_IN, 16);                     -- LCType (LOCALE_SGROUPING)
  PARM_L   := WEBUTIL_C_API.ADD_PARAMETER(ARGS_L, WEBUTIL_C_API.C_CHAR_PTR, WEBUTIL_C_API.PARAM_IN, INFO_L, LENGTH(INFO_L)); -- lpLCData
  PARM_L   := WEBUTIL_C_API.ADD_PARAMETER(ARGS_L, WEBUTIL_C_API.C_INT,      WEBUTIL_C_API.PARAM_IN, LENGTH(INFO_L));         -- cchData

  RESULT_L := WEBUTIL_C_API.INVOKE_INT('kernel32.dll', 'GetLocaleInfoA', ARGS_L);

  WEBUTIL_C_API.DESTROY_PARAMETER_LIST(ARGS_L);

  :CTLS.INFO_CTL := RESULT_L;*/
end;


Приведенный код также содержит попытку вызова MessageBox, который появляется на экране,
но после его закрытия java-машина падает.

Что в приведенном коде неправильно?
Спасибо.
...
Рейтинг: 0 / 0
WEBUTIL_C_API / Forms10
    #36921570
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Возможно, вопрос решился. Для функций, использующих WINAPI-соглашение о вызовах,
нужно писать cdecl-обертку.
...
Рейтинг: 0 / 0
WEBUTIL_C_API / Forms10
    #36922613
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно так (((

Note 285331.1

JVM Crash / Exception When Calling PASCAL style Function Via WebUTIL_C_API in Forms [ID 285331.1]
Modified 19-JAN-2010
Type PROBLEM
Status PUBLISHED

Applies to:
Oracle Forms - Version: 9.0 to 11.1 - Release: to 11.1
Information in this document applies to any platform.
Checked for relevance on 12-JAN-2010.
...
Рейтинг: 0 / 0
WEBUTIL_C_API / Forms10
    #36924296
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
И в связи c этим всплыл вопрос о том, как это же реализовано в ORA_FFI.
Там есть есть возможность задать вид вызова (PASCAL_STD - C_STD),
но по крайней мере файловый в/в из kernel32 почему-то работал независимо
от этой установки и, судя по всему, PASCAL_STD - это на самом деле не pascal call, а stdcall (WINAPI)
см.
http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B3%D0%BB%D0%B0%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%B0
...
Рейтинг: 0 / 0
WEBUTIL_C_API / Forms10
    #36925559
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*
И в связи c этим всплыл вопрос о том, как это же реализовано в ORA_FFI.
...


Давно я на ORA_FFI ничего не писал. Но думаю, просто _хорошая_ реализация чистки стека.

IMHO C от PASCAL отличается:
порядком передачи параметров, кто чистит стек (в С - вызывающий, в PASCAL - тот, кого вызывают).

STDCALL - С-порядок, но очистка стека в вызываемой программе. От того, что стек почистят два раза - при "хорошем" алгоритме почистке, ничего плохого может и не случится. Типа:

MOV <куда-то>, SP
PUSH <параметр>
...
PUSH <параметр>
CALL <процедура>
MOV SP, <от куда-то>

Если же

PUSH...PUSH
CALL
POP...POP - то понятно, что почистив стек лишний раз (и в вызванной процедуре и в вызываемой) мы убиваем SP и соответственно процесс/поток.

Но это лично мое IMHO. Могу ошибаться. Доступа к исходным текстам не имею, дизасемблирования не проводил. Да и не интересно.

Хотя, Subj ОЧЕНЬ печально. Ценность WEBUTIL_C_API падает до нуля - с учетом того, что если и делать свою DLL, то ее еще как-то нужно доставить до клиентского компьютера.

ТЕОРЕТИЧЕСКИМ ВОПРОС, к тем, кто с WEBUTIL_C_API работал:

Forms 9/10/11 предоставляет средства _доставки_ самописных DLL до клиента. Вызов - понятно WebUtils, а как DLL на клиента передавать?
...
Рейтинг: 0 / 0
WEBUTIL_C_API / Forms10
    #36926729
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
webutil позволяет автоматически загрузить dll на клиентскую машину.
dll помещаются в каталог forms/webutil, в webutil.cfg они должны быть перечислены:

#install.syslib.0.user.1=testwebutil.dll|204872|1.0|true
...
Рейтинг: 0 / 0
WEBUTIL_C_API / Forms10
    #36926735
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Разумеется, без комментария #
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / WEBUTIL_C_API / Forms10
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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