powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как узнать серийник винта?
11 сообщений из 11, страница 1 из 1
Как узнать серийник винта?
    #35924740
Dimas_Verbatim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здаствуйте!!
Пробую так:
CREATE PROCEDURE "DBA"."GetVolumeInformatio"(
in lpRootPathName char(256),
inout lpVolumeNameBuffer char(256),
in nVolumeNameSize unsigned bigint,
inout lpVolumeSerialNumber unsigned bigint,
inout lpMaximumComponentLength unsigned bigint,
inout lpFileSystemFlags unsigned bigint,
inout lpFileSystemNameBuffer char(256),
in nFileSystemNameSize unsigned bigint
)
result(@res bit) external name 'GetVolumeInformationA@kernel32.dll'

При вызове процедуры выдает ошибку: "Expression has unsupported data type" SQLCODE = - 624

Может кто-то подскажет в чем ошибка или как можно по другому?? Спасибо.
...
Рейтинг: 0 / 0
Как узнать серийник винта?
    #35925181
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimas_Verbatim,
а рвзве в ASA есть такое unsigned bigint по-моему только bigint
...
Рейтинг: 0 / 0
Как узнать серийник винта?
    #35925305
Dimas_Verbatim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Orlov,

Есть!


BIGINT data type [Numeric]

--------------------------------------------------------------------------------

Function
Integer requiring 8 bytes of storage.

Syntax
[ UNSIGNED ] BIGINT

Usage
The BIGINT data type is an exact numeric data type: its accuracy is preserved after arithmetic operations.

A BIGINT value requires 8 bytes of storage.

The range for signed BIGINT values is -263 to 263 - 1, or -9223372036854775808 to 9223372036854775807.

The range for unsigned BIGINT values is 0 to 264 - 1, or 0 to 18446744073709551615.

By default, the data type is signed.
...
Рейтинг: 0 / 0
Как узнать серийник винта?
    #35925456
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimas_Verbatim,

Кстати, а как на тему bit
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
External function return types 
The following table lists the supported return types, and how they map to the return type of the SQL function or procedure.

C data type  SQL data type  
void  Used for external procedures.  
char *  function returning CHAR().  
long  function returning INTEGER  
float  function returning FLOAT  
double  function returning DOUBLE.  

If a function in the external library returns NULL, and the SQL external function was declared to return CHAR(), then the return value of the SQL extended function is NULL.
...
Рейтинг: 0 / 0
Как узнать серийник винта?
    #35925533
Dimas_Verbatim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Orlov,

С типами игрался и ни какого результата та же ошибка! Возможно эту функцию не возможно вызвать из SQL?
...
Рейтинг: 0 / 0
Как узнать серийник винта?
    #35925719
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimas_Verbatim,
Да работало на 8-ке у меня нечто подобное, да и еще кроме процедуры есть еще и функции
т.е. попробуй create function () RETURNS int EXTERNAL NAME '....@kernel32.dll'
...
Рейтинг: 0 / 0
Как узнать серийник винта?
    #35925729
Dimas_Verbatim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Orlov,

Так в функциях же нет INOUT! Как я получу результат? ели он у меня записывается в lpVolumeNameBuffer!
Вот пример обявления в PB
Function boolean GetVolumeInformation (string lpRootPathName, ref string lpVolumeNameBuffer, ulong nVolumeNameSize, ref ulong lpVolumeSerialNumber, ref ulong lpMaximumComponentLength, ref ulong lpFileSystemFlags, ref string lpFileSystemNameBuffer, ulong nFileSystemNameSize) Library "KERNEL32.DLL" Alias for "GetVolumeInformationA"
...
Рейтинг: 0 / 0
Как узнать серийник винта?
    #35925772
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimas_Verbatim,
Да какая разница,
ты попробуй сначало обьявить ее как я тебе предложил, затем сказать set mparm=000,
затем set nerror = GetVolumeInformatio(....,mparm,...) и посмотреть результат, что утебя будет в nerror и mparm,
Да и еще, если будешь писать ее как процедуру, то точно не надо писать result(@res bit)...
...
Рейтинг: 0 / 0
Как узнать серийник винта?
    #35925783
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Orlov,

Да и вот, что еще, попробуй написать свою функцию с оформлением в dll, которая из всех параметров будет возвращать только нужное тебе...
...
Рейтинг: 0 / 0
Как узнать серийник винта?
    #35925805
Dimas_Verbatim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey OrlovDimas_Verbatim,
Да какая разница,
ты попробуй сначало обьявить ее как я тебе предложил, затем сказать set mparm=000,
затем set nerror = GetVolumeInformatio(....,mparm,...) и посмотреть результат, что утебя будет в nerror и mparm,
Да и еще, если будешь писать ее как процедуру, то точно не надо писать result(@res bit)...

Тест не удался, с функцией таже ошибка! ((((
Сейчас пытаюсь написать dll, но в с++ я не очень! ((( Сижу ковыряю!
...
Рейтинг: 0 / 0
Как узнать серийник винта?
    #35928038
Dimas_Verbatim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey Orlov,

Разобрался! ))
написал свою функцию с оформлением в dll, которая возвращает только серийник! ))
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как узнать серийник винта?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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