Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как узнать серийник винта? / 11 сообщений из 11, страница 1 из 1
10.04.2009, 12:47
    #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
10.04.2009, 14:58
    #35925181
Sergey Orlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать серийник винта?
Dimas_Verbatim,
а рвзве в ASA есть такое unsigned bigint по-моему только bigint
...
Рейтинг: 0 / 0
10.04.2009, 15:28
    #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
10.04.2009, 16:19
    #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
10.04.2009, 16:46
    #35925533
Dimas_Verbatim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать серийник винта?
Sergey Orlov,

С типами игрался и ни какого результата та же ошибка! Возможно эту функцию не возможно вызвать из SQL?
...
Рейтинг: 0 / 0
10.04.2009, 17:59
    #35925719
Sergey Orlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать серийник винта?
Dimas_Verbatim,
Да работало на 8-ке у меня нечто подобное, да и еще кроме процедуры есть еще и функции
т.е. попробуй create function () RETURNS int EXTERNAL NAME '....@kernel32.dll'
...
Рейтинг: 0 / 0
10.04.2009, 18:07
    #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
10.04.2009, 18:34
    #35925772
Sergey Orlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать серийник винта?
Dimas_Verbatim,
Да какая разница,
ты попробуй сначало обьявить ее как я тебе предложил, затем сказать set mparm=000,
затем set nerror = GetVolumeInformatio(....,mparm,...) и посмотреть результат, что утебя будет в nerror и mparm,
Да и еще, если будешь писать ее как процедуру, то точно не надо писать result(@res bit)...
...
Рейтинг: 0 / 0
10.04.2009, 18:42
    #35925783
Sergey Orlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать серийник винта?
Sergey Orlov,

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

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

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


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