powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / PBNI Wizard
18 сообщений из 43, страница 2 из 2
PBNI Wizard
    #39625624
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyAIS,
Код: plaintext
1.
2.
3.
4.
pbobject objclsdef = session->GetObjectField(obj, fid, isNull);  // это у вас уже есть
pbclass clsdefcls = objclsdef->GetClass();
pbfieldID library_fid = session->GetFieldID(clsdefcls, _T("libraryname"));
pbstring lirary_name = session->GetStringField(objclsdef, library_fid, isNull);


У-уф, наконец то получилось.
Только 2-ю строчку скорректировал на
Код: plaintext
1.
pbclass clsdefcls = session->GetClass(objclsdef);


и все поехало.
Огромное человеческое спасибо за помощь.
...
Рейтинг: 0 / 0
PBNI Wizard
    #39627674
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли из PBNI и если да, то как, экстренно закрыть приложение РВ, вызвав на прямую функцию "Halt" или "Halt Close", и не создавая при этом на стороне РВ для этого событие или функцию? В какую сторону смотреть или искать?
...
Рейтинг: 0 / 0
PBNI Wizard
    #39627676
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISМожно ли из PBNI и если да, то как, экстренно закрыть приложение РВ, вызвав на прямую функцию "Halt" или "Halt Close", и не создавая при этом на стороне РВ для этого событие или функцию? В какую сторону смотреть или искать?
Вопрос снимается, поторопился задать.
...
Рейтинг: 0 / 0
PBNI Wizard
    #39627772
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISМожно ли из PBNI и если да, то как, экстренно закрыть приложение РВ, вызвав на прямую функцию "Halt" или "Halt Close", и не создавая при этом на стороне РВ для этого событие или функцию? В какую сторону смотреть или искать?
Ан нет, таки вопрос ещё актуален...
вызов системной функции РВ
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
pbgroup sysGroup = m_pSession->GetSystemGroup();
pbclass cls = m_pSession->FindClass(sysGroup, (LPCTSTR)_TEXT("SystemFunctions"));
if (cls == NULL) {
   ci->returnValue->SetString(_T("Class is NULL"));
}
else {
   LPCTSTR f_name = _T("halt");
   LPCTSTR signature = _T(""); /* ? */
   /* так не работает */
   //pbmethodID mid = m_pSession->FindMatchingFunction(cls, f_name, PBRT_FUNCTION, signature);
   /* и так тоже не работает */
   pbmethodID mid = m_pSession->GetMethodID(cls, f_name, PBRT_FUNCTION, signature);
   if (mid == kUndefinedMethodID) {
	ci->returnValue->SetString(_T("UndefinedMethodID Halt"));
   }
   else {
       ... /* сюда уже не доходит */
   }
}


Вроде пошагово делаю правильно, но не работает. Думаю, что ошибка в установке signature. Пробовал разные варианты (пусто, Q, S), но ничего не помогло.
А может в скрипте ошибка?
...
Рейтинг: 0 / 0
PBNI Wizard
    #39627847
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS,

Если надо реально просто закрыть приложение, то просто вызовите функцию WinAPI для этого:
Код: sql
1.
ExitProcess(10 /*exit code*/);
...
Рейтинг: 0 / 0
PBNI Wizard
    #39627934
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyAIS,

Если надо реально просто закрыть приложение, то просто вызовите функцию WinAPI для этого:
Код: sql
1.
ExitProcess(10 /*exit code*/);


Спасибо, за совет. Если не найду решения, то так и сделаю.
Кстати, вот это из примера в доках:
Код: sql
1.
2.
3.
LPCTSTR f_name = _T("double");
LPCTSTR signature = _T("DA");
pbmethodID mid = m_pSession->GetMethodID(cls, f_name, PBRT_FUNCTION, signature);


работает, а с "halt" - нет. Ну, да ладно...

А вообще, я так понимаю что, то что сделано на стороне РВ лучше в PBX не перетягивать. Одним словом проще WinAPI использовать в PBX, чем РВ.
...
Рейтинг: 0 / 0
PBNI Wizard
    #39630382
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Снова о Halt, уж больно стало интересно...
В списке системных функций её нет. Есть только упоминание в help.
Может это не системная функция, тогда что это?
...
Рейтинг: 0 / 0
PBNI Wizard
    #39630421
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS,

Так HALT это не функция, а оператор, как RETURN
...
Рейтинг: 0 / 0
PBNI Wizard
    #39630446
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyAIS,

Так HALT это не функция, а оператор, как RETURN
Вот пазлы и сложились, чего вызов не работал. Что то перемкнуло с этим HALT, что это системная функция.
Спасибо за ликбез, сразу попустило...))
...
Рейтинг: 0 / 0
PBNI Wizard
    #39634644
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очередной вопросик.
Если нужны в РВХ функции для внутренних вычислений, т.е. которые не взаимодействуют с РВ, то как их создать?

ПС. сделал тестовую функцию "test", которая вычисляет и передает значение "int" функции, которую можно вызвать из РВ и увидеть это значение. Вроде все работает, но в РВ-проекте появилась глобальная функция "int" без каких либо свойств. Если бы появилась "test", то хоть бы как то было оправдано, хотя и не понятно почему, но тут "int". Видать где-то что-то не так делаю или не доделал. Может кто подскажет...
...
Рейтинг: 0 / 0
PBNI Wizard
    #39635520
Oleg1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AIS, как на С функции пишутся, так и делать. PBX тут вообще ни каким боком.
Писать PBNI-объявления необходимо только для того, что вызывает непосредственно билдер.
...
Рейтинг: 0 / 0
PBNI Wizard
    #39647443
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще пару вопросов.
1.
Почему в РВ и в PBNI вызов CreateFile по разному?
Код: sql
1.
2.
3.
4.
/* в РВ так работает */
lul_hDisk = CreateFile( "\\.\c:", 0, FILE_SHARE_READ_OR_WRITE, 0, OPEN_EXISTING, 0, 0)
/* а так нет */
lul_hDisk = CreateFile( "\\.\PhysicalDrive0", 0, FILE_SHARE_READ_OR_WRITE, 0, OPEN_EXISTING, 0, 0)


Код: plaintext
1.
2.
3.
4.
5.
6.
/* в PBNI так работает */
CreateFile(L"\\\\.\\PhysicalDrive0", 0, FILE_SHARE_READ | FILE_SHARE_WRITE,
					NULL, OPEN_EXISTING, 0, NULL);
/* а так нет */
CreateFile(L"\\.\c:", 0, FILE_SHARE_READ | FILE_SHARE_WRITE,
					NULL, OPEN_EXISTING, 0, NULL);



2.
есть в PBNI такой кусок работающего кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
// Set the input data structure
STORAGE_PROPERTY_QUERY storagePropertyQuery;
ZeroMemory(&storagePropertyQuery, sizeof(STORAGE_PROPERTY_QUERY));
storagePropertyQuery.PropertyId = StorageDeviceProperty;  //=0
storagePropertyQuery.QueryType = PropertyStandardQuery; //=0

// Get the necessary output buffer size
STORAGE_DESCRIPTOR_HEADER storageDescriptorHeader = { 0 };
DWORD dwBytesReturned = 0;
if (!::DeviceIoControl(hDevice, IOCTL_STORAGE_QUERY_PROPERTY,
	&storagePropertyQuery, sizeof(STORAGE_PROPERTY_QUERY),
	&storageDescriptorHeader, sizeof(STORAGE_DESCRIPTOR_HEADER),
	&dwBytesReturned, NULL))
{
	dwRet = ::GetLastError();
	::CloseHandle(hDevice);
	return dwRet;
}



попытался его перенести в РВ:
Код: sql
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.
nvo_sizeof	uo_sizeof
	
STORAGE_PROPERTY_QUERY query
query.PropertyId = StorageDeviceProperty
query.QueryType = PropertyStandardQuery
lul_lpInBuffer = uo_sizeof.sizeof(query)
	
STORAGE_DESCRIPTOR_HEADER storageDescriptorHeader
lul_lpOutBuffer = uo_sizeof.sizeof(storageDescriptorHeader)
lul_lpBytesReturned = 0

If DeviceIoControl( lul_hDisk, IOCTL_STORAGE_QUERY_PROPERTY,
	query, lul_lpInBuffer, storageDescriptorHeader,
	lul_lpOutBuffer, lul_lpBytesReturned, 0) = 0 Then
	Messagebox("STORAGE_QUERY_PROPERTY", "INVALID_HANDLE_VALUE")
Else
	Messagebox("STORAGE_QUERY_PROPERTY", "OK")
End If
/*
Function boolean DeviceIoControl ( &
	ulong hDevice,&
	ulong dwIoControlCode,&
	Structure lpInBuffer,&
	ulong nInBufferSize,&
	ref Structure lpOutBuffer,&
	ulong nOutBufferSize,&
	ref ulong lpBytesReturned,&
	ulong lpOverlapped &
	) LIBRARY "kernel32.dll"
*/



не работает. Где то ошибка или это в принципе не возможно на РВ?
...
Рейтинг: 0 / 0
PBNI Wizard
    #39647549
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS
Код: plaintext
1.
L"\\.\c:"


В С++ это неверная строка. \с - это спецсимвол.
Должно быть:
Код: plaintext
1.
L"\\\\.\\c:"



Остальное не смотрел - некогда
...
Рейтинг: 0 / 0
PBNI Wizard
    #39647623
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyAIS
Код: plaintext
1.
L"\\.\c:"


В С++ это неверная строка. \с - это спецсимвол.
Должно быть:
Код: plaintext
1.
L"\\\\.\\c:"



Остальное не смотрел - некогда
Упс! Точно, спасибо.
...
Рейтинг: 0 / 0
PBNI Wizard
    #39651436
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уперся еще в один вопрос - передача параметра между функциями внутри PBNI.
Например, в PBNI создал две тестовые функции Rand и Randomize, которые вызывают соответственно одноименные системные функции РВ.
Обе функции по отдельности работают. Но как в PBNI из одной функции (Rand) вызвать другую (Randomize), а точнее передать параметр и принять его, не пойму.
Как правильно передавать параметры между функциями внутри PBNI?
...
Рейтинг: 0 / 0
PBNI Wizard
    #39654423
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос чисто риторический, и возможно не в том форуме, то прошу прошения... ;)
А может не хрен постигать "шедевры" PBNI, чтобы доточить в то, что уже "мертво", то чего в нем при жизни не было? Может уже давно пора просто "это все" делать на с++ и еб&ть себе мозги? (прошу извинить за прямоту, но уже с PBNI мозги набекрень...)
...
Рейтинг: 0 / 0
PBNI Wizard
    #39655508
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS,

В С++ большой порог вхождения. Нужны годы чтобы достичь хотя бы среднего уровня.
Лучше C# или там Java.
Но надо помнить, что то что в ПБ дает сам язык (например DW) в других языках возможно придется самому реализовать.
...
Рейтинг: 0 / 0
PBNI Wizard
    #39660348
Фотография Richard18
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант, смоделировать ситуатуцию на 32 виртуалке.
...
Рейтинг: 0 / 0
18 сообщений из 43, страница 2 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / PBNI Wizard
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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