Корректное преобразованте H файлов в формат delphi

Здесь обсуждаем систему TDM/PDM/Workflow Lotsia PDM PLUS (PartY PLUS).
Ответить
Victor N. Kosobokov
Новый участник
Сообщения: 1
Зарегистрирован: 08 авг 2005, 09:35

Корректное преобразованте H файлов в формат delphi

Сообщение Victor N. Kosobokov »

Купили в июле 2005г. Lotsia PDM Plus LT (лок.) .
Достаю функции из Dll написанной на watcom C. Есть Н- файлы watcom C. Простые функции - практически без параметров
или 1,2,3 параметра - достаю нормально, но далее начинаются проблемы с типами (если надо , подставляю Variant или Ole Variant),
так-что пытаюсь переконвертировать Н-файлы для watcom C в делфийский формат.
Воспользовался Dr. Bob’s c Dll Header Converter 4.20 .
Но на строчку {$INCLUDE <windows.h>} выдается
[Fatal Error] LSAPIBASE.PAS(27): File not found: 'E:\Asl\PartyAPI\ApiSample\TestApp\<windows.h>'
в тексте 1-й стоящей в описании проекта Dll. Если я меняю порядок подключения в файле описания проекта, и на место этой Dll становится другая то там относительно др. Н-файла выдается аналогичная ошибка – на {$INCLUDE <LsApiBase.h>},.
Попробовал вместо <> ставить “” или ‘’ - не помогло - ошибок становится больше.

Пробежался по форумам - ничего не нашел. Не было ли у кого-либо
ничего такого, или м.б. подскажите где посмотреть.
Аватара пользователя
Alxd
Активный участник
Сообщения: 50
Зарегистрирован: 15 июл 2004, 12:42
Откуда: Тюмень
Контактная информация:

Сообщение Alxd »

Я этим занимался года 1.5-2 назад. Версия API была постарее сегодняшней, но как образец - пойдет. Сразу предупреждаю, что я не стал пользоваться автоматическими преобразователями. Просто объявил типы, которые мне были нужны и все.

Фрагмент кода:
const
PARTYAPI = 'PartyApi.dll';

LSAPI_E_OK = 0;
LSAPI_E_FAIL = 1;
LSAPI_E_CANCEL = 2;
LSAPI_E_NOTRUN = 3;
LSAPI_E_NOACCESS = 4;
LSAPI_E_DATA = 5;
LSAPI_E_CALL = 6;
LSAPI_E_NODATA = 7;

PARTY_E_OK = 0; // Ok
PARTY_E_FAIL = 1; // Ошибка в PartY
PARTY_E_CANCEL = 2; // Отмена пользователем
PARTY_E_NOTRUN = 3; // PartY не запущена
PARTY_E_NOACCESS = 4; // Нет достаточных прав
PARTY_E_DATA = 5; // Ошибка аргументов
PARTY_E_CALL = 6; // Ошибка вызова PartY
PARTY_E_NODATA = 7; // Нет запрашиваемой информации
PARTY_E_NORPTOBJ = 8; // Нет объекта для отчета

PARTY_SELECT_ONE = 0; // Выбор одного значения
PARTY_SELECT_MULTI = 1; // Выбор нескольких значений

PARTY_OBJLINKGET_CHILD = $01; // получить дочерние объекты
PARTY_OBJLINKGET_PARENT = $02; // получить родительские объекты
PARTY_OBJLINKGET_ALL = $03; // получить все объекты


PARTY_OBJID_MAX = 18;

PARTY_PLUGINTYPE_RUN = 0; // запуск из меню
PARTY_PLUGINTYPE_RUNOBJECT = 1; // запуск для обработки объекта
PARTY_PLUGINTYPE_EDITVALUE = 2; // редактирование значения атрибута

PARTY_PLUGIN_OBJECTNEED = 1; // требуется указать объект
PARTY_PLUGIN_OBJECTSEQ = 2; // вызывать для каждого объекта отдельно

...

type
PtID_ = char;
PtID = array [0..PARTY_OBJID_MAX-1] of PtID_;
LPCPtID = ^PtID_;

TMnemo = array[0..4] of char;

PPtDateTime = ^TPtDateTime;
TPtDateTime = record
Year: WORD;
Month: BYTE;
Day: BYTE;
Hour: BYTE;
Min: BYTE;
Sec: BYTE;
MilSec: Longword;
end;

PPtValue = ^TPtValue;
TPtValue = record
cDataType: char;
szValueS: array[0..255] of char;
dblValueN: double;
dtValueT: TPtDateTime;
end;

PPPtList = ^PPtList;
PPtList = ^TPtList;
TPtList = record
dwSize: Longword;
wType: SHORT;
wCnt: WORD;
end;

PPPtPluginInfo = ^PPtPluginInfo;
PPtPluginInfo = ^TPtPluginInfo;
TPtPluginInfo = record
dwSize: Longword;
lpfnProcPtr: FARPROC;
dwProcParam: Longword;
dwType: Longword;
lpszName: LPSTR;
lpTypeInfo: Pointer;
end;

PPtObject = ^TPtObject;
TPtObject = record
piID: PtID;
piTypeID: PtID;
szDescription: array[0..50] of char;
szTypeDesc: array[0..50] of char;
szTypeMnemo: array[0..4] of char;
cTypeClass: char;
end;

PPtObjAttrib = ^TPtObjAttrib;
TPtObjAttrib = record
piID: PtID;
piAttribID: PtID;
pvValue: TPtValue;
cMultiType: char;
cLinkMode: char;
piGroupID: PtID;
szEditMask: array[0..255] of char;
cEditType: char;
szDescription: array[0..50] of char;
szGroupDescr: array[0..50] of char;
end;

PPtObjTree = ^TPtObjTree;
TPtObjTree = record
piID: PtID;
piParentID: PtID;
piLinkID: PtID;
end;

PPtObjLink = ^TPtObjLink;
TPtObjLink = record
dwSize: Longword;
piID: PtID;
piParentID: PtID;
piLinkID: PtID;
dwLinkTypeID: Longword;
end;

PPtPluginAttrValList = ^TPtPluginAttrValList;
TPtPluginAttrValList = record
piAttribID: PtID;
pvValue: TPtValue;
end;

PPtPluginCallParam1 = ^TPtPluginCallParam1;
TPtPluginCallParam1 = record
dwSize: Longword;
dwObjectCount: Longword;
lpObjectID: LPCPtID;
dwLinkTypeID: Longword;
dwTLinkCount: Longword;
lpTLinkID: LPCPtID;
end;

PPtPluginCallParam2 = ^TPtPluginCallParam2;
TPtPluginCallParam2 = record
dwSize: Longword;
piTypeID: PtID;
piAttribID: PtID;
pvValue: TPtValue;
wAttrValCnt: WORD;
lpAttrValList: PPtPluginAttrValList;
cEditType: char;
piObjectID: PtID;
piTLinkID: PtID;
end;

PPtPluginInfoRunObject = ^TPtPluginInfoRunObject;
TPtPluginInfoRunObject = record
dwSize: Longword;
dwFlags: Longword;
end;

PPtPluginInfoEditValue = ^TPtPluginInfoEditValue;
TPtPluginInfoEditValue = record
dwSize: Longword;
cDataType: char;
lpszEditName: LPSTR;
end;


PPtStrAttrib = ^TPtStrAttrib;
TPtStrAttrib = record
piID: PtID;
cDataType: char;
cMultiType: char;
cLinkMode: char;
piGroupID: PtID;
szEditMask: array[0..255] of char;
cEditType: char;
szDescription: array[0..50] of char;
szGroupDescr: array[0..50] of char;
cHistory: char;
end;

PPtStrObjType = ^TPtStrObjType;
TPtStrObjType = record
piID: PtID;
szDescription: array[0..50] of char;
szIconPath: array[0..50] of char;
cClass: char;
lSortKey: longint;
cLinkType: char;
szMnemo: array[0..4] of char;
end;

PPtConnectInfo = ^TPtConnectInfo;
TPtConnectInfo = record
dwSize: DWORD;
lpszLoginName: PChar;
lpszPassword: PChar;
wDBMSType: WORD;
lpszServer: PChar;
lpszDataBase: PChar;
end;

const
EMPTYPTID: PtID = (#0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0, #0);

...

function PartyInit(hwndApp: HWND): WORD; stdcall; external PARTYAPI;
function PartyConnectInfo(var lpConnInfo: PPtConnectInfo): WORD; stdcall; external PARTYAPI;

function PartyLoad(): WORD; stdcall; external PARTYAPI;
function PartyFormatError(lpBuffer: LPSTR; dwFlags: Longword): WORD; stdcall; external PARTYAPI;
function PartyUpdate(): WORD; stdcall; external PARTYAPI;
function PartyReset(): WORD; stdcall; external PARTYAPI;

function PartyUIActivate: WORD; stdcall; external PARTYAPI;
function PartyUIObjectSelect(lpObjID: LPCPtID; dwFlags: DWORD; Res1: Pointer): WORD; stdcall; external PARTYAPI;
function PartyUIObjectSelect2(hWndParent: HWND; lpObjID: LPCPtID; dwFlags: DWORD; Res1: Pointer): WORD; stdcall; external PARTYAPI;

function PartyObjAttribGet(lpObjID, lpTLinkID, lpAttrID: LPCPtID; lpList: PPPtList): WORD; stdcall; external PARTYAPI;

function PartyObjectGet(lpObjID: LPCPtID; lpList: PPPtList): WORD; stdcall; external PARTYAPI;

function PartyObjTreeGetChild(lpObjID: LPCPtID; lpList: PPPtList): WORD; stdcall; external PARTYAPI;
function PartyObjTreeLinkGet(lpObjID: LPCPtID; dwLinkTypeID, dwFlags: Longword; lpList: PPPtList; Res1: Pointer): WORD; stdcall; external PARTYAPI;

function PartyStrAttribGet(lpID: LPCPtID; lpList: PPPtList; Res1: Pointer): WORD; stdcall; external PARTYAPI;

function PartyStrObjTypeGet(lpID: LPCPtID; lpList: PPPtList; Res1: Pointer): WORD; stdcall; external PARTYAPI;

function PartyEditObjAttribGet(lpObjID, lpTLinkID, lpAttrID: LPCPtID; fOriginal: BOOL; lpList: PPPtList): WORD; stdcall; external PARTYAPI;
YAS

Сообщение YAS »

Также хочу отметить, что для работы с PartyAPI стабильнее работает позднее связывание. При раннем связывании возникали различные ошибки и работа была не стабильной.
Ответить