powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / ПОМОГИТЕ ПЛЗ Structure+union
17 сообщений из 17, страница 1 из 1
ПОМОГИТЕ ПЛЗ Structure+union
    #39227002
VVasilevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые коллеги задача такова
есть функция написанная на С++ часть процедур и функций работают, но вот такая функция которая использует зависимую структуру
Object не работает я вообще не понимаю как ее описать для PB

FUNCTION ULong FName( String a, Object strObject ) LIBRARY "FDLL.DLL"

описание структуры в заголовочном файле для С++ написано следующее
/**************************************************/
typedef enum {FIXNUM,FLOATNUM} object_type;
typedef struct object {
object_type type;
union {
struct { long value; } fixnum;
struct { float value; } floatnum;
} data;
} object;
/***********************************/

Как эту структуру описать для вызова в PB

Спасибо!
Очень нужно
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39228116
exPBguy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VVasilevsky, по сути, вам надо передать длинное целое, значение с плавающей точкой и булевый селектор. Можно написать функцию-прокладку на плюсах. Если dll ваша, то это даже не гробит стройность системы. Если, как подозреваю, нет, то появится еще одна dll, которую придется таскать с собой. Если "очень нужно", то это вполне приемлемый workaround, нет?
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39228172
exPBguy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или вот - http://sqlbatch.com/pbinvoke/
Автор бывает тут, кстати.
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39228682
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exPBguyИли вот - http://sqlbatch.com/pbinvoke/
Автор бывает тут, кстати.

Да, бывает ))

Но в данном случае можно извратиться и без оберток на С.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
const long FIXNUM = 0
const long FLOATNUM = 1

structure fix_object
  long obj_type
  long data
end structure

structure float_object
  long obj_type
  float data
end structure

FUNCTION ULong FNameFix( String a, ref fix_object strObject ) LIBRARY "FDLL.DLL"
FUNCTION ULong FNameFloat( String a, ref float_object strObject ) LIBRARY "FDLL.DLL"



Это набросок, псевдокод (нет ПБ под рукой).
Суть в том что в зависимости от типа данных (long или float) вы заполняете соотв. вариант структуры и передаете в соотв. вариант функции.
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39229092
exPBguy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Anatoly Moskovsky. А ведь верно. Спасибо, маэстро. Хоть вопрос и не мой, но увидеть правильное и красивое решение доставляет эстетическое удовольствие. :-))
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39229114
VVasilevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,

ОГРОМНОЕ СПАСИБО КРАСИВОЕ РЕШЕНИЕ
ПОПРОБУЮ ОТВЕЧУ
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39229259
VVasilevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,

Уважаемый Anatoly огромное спасибо за ответ
у меня еще вопрос на самом деле структура зависимая от enum она возвращается из DLL в результате внутренней обработке по сему не известно заранее какого типа будет значение перечисления
Опишу подробнее с конкретным примером
есть API на C в доке к API написано что использовать для VC 6 and above
есть файл заголовка есть DLL есть библиотека импорта есть пример вызова для С
но у меня PB
может подробнее напишете как вызвать втавлю файлы
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39229261
VVasilevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VVasilevskyAnatoly Moskovsky,

Уважаемый Anatoly огромное спасибо за ответ
у меня еще вопрос на самом деле структура зависимая от enum она возвращается из DLL в результате внутренней обработке по сему не известно заранее какого типа будет значение перечисления
Опишу подробнее с конкретным примером
есть API на C в доке к API написано что использовать для VC 6 and above
есть файл заголовка есть DLL есть библиотека импорта есть пример вызова для С
но у меня PB
может подробнее напишете как вызвать втавлю файлы
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39229263
VVasilevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VVasilevskyVVasilevskyAnatoly Moskovsky,

Уважаемый Anatoly огромное спасибо за ответ
у меня еще вопрос на самом деле структура зависимая от enum она возвращается из DLL в результате внутренней обработке по сему не известно заранее какого типа будет значение перечисления
Опишу подробнее с конкретным примером
есть API на C в доке к API написано что использовать для VC 6 and above
есть файл заголовка есть DLL есть библиотека импорта есть пример вызова для С
но у меня PB
может подробнее напишете как вызвать втавлю файлы
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39229268
VVasilevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VVasilevskyVVasilevskyпропущено...

здесь описание примеров вызова на С
Нужно либо сделать другую DLL содержащие те же функции но возвращающие значения в структуры с которыми может работать PB либо научите работать с теми которые описаны в примере
а именно

/* Received message type */
typedef enum
{
PositiveReply,
NegativeReply,
ReplyReceivingFailure,
CommandCancellation,
ReplyTimeout,
}
REPLY_TYPE, *LPREPLY_TYPE;



/* Data structure for positive reply message */
typedef struct
{
BYTE bCommandCode;
BYTE bParameterCode;

struct
{
BYTE bSt1;
BYTE bSt0;
}
StatusCode;

struct
{
DWORD dwSize;
BYTE bBody[ MAX_DATA_ARRAY_SIZE];
}
Data;
}
POSITIVE_REPLY, *LPPOSITIVE_REPLY;



/* Data structure for negative reply message */
typedef struct
{
BYTE bCommandCode;
BYTE bParameterCode;

struct
{
BYTE bE1;
BYTE bE0;
}
ErrorCode;

struct
{
DWORD dwSize;
BYTE bBody[ MAX_DATA_ARRAY_SIZE];
}
Data;
}
NEGATIVE_REPLY, *LPNEGATIVE_REPLY;



/* Data structure for reply message */
typedef struct
{
REPLY_TYPE replyType;

union
{
POSITIVE_REPLY positiveReply;
NEGATIVE_REPLY negativeReply;
}
message;

}
REPLY, *LPREPLY;
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39229305
VVasilevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exPBguy,

Спасибо согласен с Вашим решением именно по этому пути я и хотел пойти сделать еще одну DLL но я в С уже давнооо не писал порядком все забыл пытался написать нифига не вышло лезут непонятные ошибки да и все
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39229483
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VVasilevsky,

Из приведенных деклараций видно, что структуры POSITIVE_REPLY и NEGATIVE_REPLY различаются только именованием полей хранящих код возврата.
Поэтому на стороне ПБ их можно объединить в одну структуру.

Код: 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.
structure str_command
  byte bCommandCode;
  byte bParameterCode;

  // data
  ulong dwSize
  blob lpbBody   // не уверен что сработает

end structure

structure str_reply
  byte bCommandCode;
  byte bParameterCode;

  // error code/status code
  byte status_code1
  byte status_code2

  // data
  ulong dwSize
  byte bBody[1024]

end structure


//DLL_API DWORD WINAPI    ExecuteCommand2( LPCSTR, LPCOMMAND, CONST DWORD, LPREPLY);
FUNCTION ULong ExecuteCommand2( String a, ref str_command cmd, ulong param, ref str_reply reply) LIBRARY "FDLL.DLL"



byte - начиная с ПБ10. В более ранних - тип char.

К сожалению, как с этим всем работать не могу подсказать - слишком долго вникать.
Единственное могу сказать, что непросто будет, учитывая указатели на массивы и колбэки, которые в ПБ не поддерживаются.
Так что я бы на вашем месте таки сделал обертку на С с удобным для ПБ интерфейсом. А уже ее вызывал бы из ПБ.
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39230831
VVasilevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,

Спасибо за ответ помогите сделать обертку не огу разобраться с С уже голову сломал а сишников у мя знакомых нет готов на взаимовыгодном условии можем обговорить
в принципе мне нужны только 3и функции
ConnectDevice
DisconnectDevice
ExecuteCommand
Пусть внутри обертки на С делается все что угодно главное чтобы ПБ их мог вызвать передать параметры:
ComPortNumber,BaudRate,TimeOut, CommandCode, CommandParm
и получить данные в структуру которую понимает ПБ

{
ResultCode ULong,
ReplyType String //"Positive" or "Negative"
RetCode1_ofReplyType string,
RetCode2_ofReplyType string,
}

Ну или чтото наподобие важно чтобы можно было передать все что нужно и получить все что должно быть но в виде понятного для ПБ
Извините но вот это очень нужно месяц бьюсь с этим
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39230849
VVasilevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exPBguyИли вот - http://sqlbatch.com/pbinvoke/
Автор бывает тут, кстати.
Спасибо за НаВодку :-)) ное есть НО не понимает PBInvoke структуру в которой есть Enum зависимая структура :-)) и вообще перечисляемый тип PBInv не понимает :-(
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39230877
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VVasilevskyпомогите сделать обертку
К сожалению занят я, а это не минутное дело.
VVasilevskyне понимает PBInvoke структуру в которой есть Enum
Замените enum на int и все дела )
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39230976
VVasilevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyVVasilevskyпомогите сделать обертку
К сожалению занят я, а это не минутное дело.
VVasilevskyне понимает PBInvoke структуру в которой есть Enum
Замените enum на int и все дела )
А если на коммерческой основе это будет неким поводом для того чтобы уделить время для этой задачи
Моя благодарность будет адекватна адекватным Вашим запросам :-))
Понимаю, что не минута но в 2-а рабочих дня управитесь?
За них заплачу как если бы Вы работали в Москве по средней ставке программера высокой категории :-=))
...
Рейтинг: 0 / 0
ПОМОГИТЕ ПЛЗ Structure+union
    #39231055
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VVasilevsky,

Сорри, нет свободного времени вообще.
Предлагаю в форум Работа написать, наверняка С-шники без дела там тусуются.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / ПОМОГИТЕ ПЛЗ Structure+union
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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