powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / DLL Type Record
17 сообщений из 17, страница 1 из 1
DLL Type Record
    #34632412
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ,
Нужна помощь,
Есть DLL в которой есть функции и процедуры к которым обращаюсь из VFP...
Проблема возникла из-за процедуры, которая возвращает значение в переменную типа Record:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure FRegG_StatPRN(var StPRN_:StatusPRN); stdcall;

type StatusPRN = record
        DSPReadyStatus:Boolean;  
        BoxStatus:integer;
        TehMode:Boolean; 
        PrnError:Boolean;         // Ошибка принтера (Да/Нет) (True/False)
        PrnKnifeEnable:Boolean;
        EndPaper:Boolean;         // Конец бумаги (Да/Нет) (True/False)
        PrnReadyStatus:Boolean;   // Готовность принтера (Готов/Нет) (True/False)
        PrnErrorStatus:Boolean;   // Принтер занят, выключен, или произошла ошибка (True/False)
end;
Как мне достучаться к этой переменой с такм типом данных?
Всем огромное спасибо за оказанную помощь...
...
Рейтинг: 0 / 0
DLL Type Record
    #34632461
Строка с последующим ручным разбором.
...
Рейтинг: 0 / 0
DLL Type Record
    #34632898
проходил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и если она написана на Delphi, Вы просто так не отделаетесь :)
...
Рейтинг: 0 / 0
DLL Type Record
    #34633094
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.Строка с последующим ручным разбором.
ну как заполучить эту строку?
...
Рейтинг: 0 / 0
DLL Type Record
    #34633206
Точно также, как и другие строки.
...
Рейтинг: 0 / 0
DLL Type Record
    #34633270
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.Точно также, как и другие строки.
А по-конкрентней можно?
DECALRE STRING FRegG_StatPRN IN FuckingLib.DLL String @ReturnString ???
Можно пример?
...
Рейтинг: 0 / 0
DLL Type Record
    #34633445
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valerii проходящий.Точно также, как и другие строки.
А по-конкрентней можно?
DECALRE STRING FRegG_StatPRN IN FuckingLib.DLL String @ReturnString ???
Можно пример?

Неужели никто не сталкивался с такой проблемой?
...
Рейтинг: 0 / 0
DLL Type Record
    #34633478
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DECALRE STRING FRegG_StatPRN IN FuckingLib.DLL String @ReturnString
А что, процедура возвращаетс строку? Тогда почему она объявлена строковой?

Код: plaintext
DECALRE Int FRegG_StatPRN IN FuckingLib.DLL String @ReturnString 
...
Рейтинг: 0 / 0
DLL Type Record
    #34633740
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
DLL Type Record
    #34634251
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sizov DECALRE STRING FRegG_StatPRN IN FuckingLib.DLL String @ReturnString
А что, процедура возвращаетс строку? Тогда почему она объявлена строковой?

Код: plaintext
DECALRE Int FRegG_StatPRN IN FuckingLib.DLL String @ReturnString 

Вот именно, она должна возвращать переменую тип Record (Pascal, Delphi), в фоксе такого типа нет,
я создал класс Custom c аналогичными свойствами, но прога вылетает...
DECLARE STRING FRegG_StatKKM IN Libs\gepard.dll STRING a
FRegG_StatKKM(a)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DEFINE CLASS StatKKM AS CUSTOM
	changes 		= .T.
	tape 			=  1
	CopyDocBuf 		= .T.
	GraphHead 		= .T.
	FiskalDevice 	= .T.
	FiskalEndMemory = .T.
	FiskalMemory 	= .T.
	Protocol 		=  1
	StatusDoc 		=  1
	OperationType 	=  1
	EnableCopy 		= .T.
ENDDEFINE
...
Рейтинг: 0 / 0
DLL Type Record
    #34634273
А Вы не путаете возврат значения с изменением переданного параметра?

procedure FRegG_StatPRN(var StPRN_:StatusPRN); stdcall;type StatusPRN = record DSPReadyStatus:Boolean; BoxStatus:integer; TehMode:Boolean; PrnError:Boolean; // Ошибка принтера (Да/Нет) (True/False) PrnKnifeEnable:Boolean; EndPaper:Boolean; // Конец бумаги (Да/Нет) (True/False) PrnReadyStatus:Boolean; // Готовность принтера (Готов/Нет) (True/False) PrnErrorStatus:Boolean; // Принтер занят, выключен, или произошла ошибка (True/False)end;


Где здесь указание на возвращаемое значение?
...
Рейтинг: 0 / 0
DLL Type Record
    #34634522
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проходящий.А Вы не путаете возврат значения с изменением переданного параметра?

procedure FRegG_StatPRN(var StPRN_:StatusPRN); stdcall;type StatusPRN = record DSPReadyStatus:Boolean; BoxStatus:integer; TehMode:Boolean; PrnError:Boolean; // Ошибка принтера (Да/Нет) (True/False) PrnKnifeEnable:Boolean; EndPaper:Boolean; // Конец бумаги (Да/Нет) (True/False) PrnReadyStatus:Boolean; // Готовность принтера (Готов/Нет) (True/False) PrnErrorStatus:Boolean; // Принтер занят, выключен, или произошла ошибка (True/False)end;


Где здесь указание на возвращаемое значение?

Здесь не возврат значения, а в передваемый параметр / переменную, записывается состояние девайся. Переменная тип Рекорд....
...
Рейтинг: 0 / 0
DLL Type Record
    #34634717
ВБ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно, в фоксе не поддерживаются структуры (или, по Паскалю, записи).
Поэтому результат выполнения функции помещается в строку:
Код: plaintext
DECALRE Int FRegG_StatPRN IN FuckingLib.DLL String @ReturnString 

Перед вызовом функции переменная ReturnString должна быть объявлена и иметь необходимую длину, равную длине структуры (записи) в байтах. Тип Int - это четыре байта, тип Boolean - это, скорее всего, тоже четыре байта. Поэтому длина структуры - 8 * 4 = 32 байта.
Пишете код:
Код: plaintext
1.
2.
ReturnString = SPACE( 32 )  && или REPLICATE(CHR( 0 ),  32 )
FRegG_StatPRN(@ReturnString)
Ну и затем "потрошите" возвращённое значение, разбивая ReturnString на группы по 4 байта.
...
Рейтинг: 0 / 0
DLL Type Record
    #34634869
Здесь не возврат значения, а в передваемый параметр / переменную, записывается состояние девайся.

Вот именно! Так почему Вы объявляете свою функция как строковую?

DECALRE STRING FRegG_StatPRN


Переменная тип Рекорд

Да какая разница? Не важно какого типа переменная, важно то, что такого типа в фоксе нет! Но в любом случае это последовательность байтов. Которую в фоксе можно обработать как строку. Но как строку, а не переменную типа Рекорд.

Вам теперь уже два раза написали:

Код: plaintext
DECALRE Int FRegG_StatPRN IN FuckingLib.DLL String @ReturnString 

Теперь Вам еще и расшифровали авторСтрока с последующим ручным разбором.
...
Рейтинг: 0 / 0
DLL Type Record
    #34635100
Valerii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВБДействительно, в фоксе не поддерживаются структуры (или, по Паскалю, записи).
Поэтому результат выполнения функции помещается в строку:
Код: plaintext
DECALRE Int FRegG_StatPRN IN FuckingLib.DLL String @ReturnString 

Перед вызовом функции переменная ReturnString должна быть объявлена и иметь необходимую длину, равную длине структуры (записи) в байтах. Тип Int - это четыре байта, тип Boolean - это, скорее всего, тоже четыре байта. Поэтому длина структуры - 8 * 4 = 32 байта.
Пишете код:
Код: plaintext
1.
2.
ReturnString = SPACE( 32 )  && или REPLICATE(CHR( 0 ),  32 )
FRegG_StatPRN(@ReturnString)
Ну и затем "потрошите" возвращённое значение, разбивая ReturnString на группы по 4 байта.

Появилось вот это:
Код: plaintext
Cannot find entry point "name" in the DLL (Error 1754)
...
Рейтинг: 0 / 0
DLL Type Record
    #34635409
ВБ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ValeriiПоявилось вот это:
Cannot find entry point "name" in the DLL (Error 1754)

Ну здесь Вам, батенька, никто не сможет помочь - если речь идёт о функции с именем "name".
Или вместо "name" в сообщении что-нить другое?

Тут есть один момент: имя API функции зависит от регистра символов. Т.е. оно должно выглядеть именно так, как было написано на Си, Паскале и пр. Проверьте правильность!

Если и это не поможет, то уже ничего не поможет, кроме авторов этой библы...
...
Рейтинг: 0 / 0
DLL Type Record
    #34635780
Декоратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала стоить выполнить:
dumpbin.exe /exports FuckingLib.DLL >> Report.txt

Потом посмотреть Report.txt
Должно поулчиться что-то типа:

============================================
Microsoft (R) COFF/PE Dumper Version 7.10.6030
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file XDll.dll

File Type: DLL

Section contains the following exports for XDll.DLL

00000000 characteristics
465C1EFA time date stamp Tue May 29 16:39:22 2007
0.00 version
1 ordinal base
6 number of functions
4 number of names

ordinal hint RVA name

1 0 00001000 GetSum
2 1 000021F0 InitSocket
6 2 00001020 Send_Message
5 3 00001010 Socket_Close
3 00002000 [NONAME]
4 00001850 [NONAME]

Summary

2000 .data
3000 .rdata
2000 .reloc
A000 .text

=================================================

Внимательно посмотреть секцию
ordinal hint RVA name
И узнать как же все-таки правильно называется Ваша функция.
Удачи.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / DLL Type Record
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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