Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / null-терминированная строка / 25 сообщений из 49, страница 1 из 2
29.09.2008, 18:31
    #35566093
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
Доброго времени суток, уважаемые!

Подскажите пожалуйста как получить адресс null-терминированной строки?
Т.е. есть:

Код: plaintext
1.
2.
dim par$
par = "aaaaaa" & Chr$( 13 ) & "bbbb" & Null

Надо получить адрес этой конструкции, не подскажите как?
...
Рейтинг: 0 / 0
29.09.2008, 18:55
    #35566132
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
В общем это был глупый вопрос. Он уже снят. Но зато появился другой: Когда в результате выполнения функции из dll возвращается null-терминированная строка, и я пытаюсь ее считать в переменную то вываливается ошибка VB:

AppName: vb6.exe AppVer: 6.0.89.88 ModName: kernel32.dll
ModVer: 5.1.2600.3119 Offset: 00009d92

Как с этим бороться?
...
Рейтинг: 0 / 0
29.09.2008, 19:16
    #35566172
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
> Автор: Kallandor
> В общем это был глупый вопрос. Он уже снят.

Самокритика это хорошо ;)

> Но зато появился другой: Когда в результате выполнения функции из dll возвращается
> null-терминированная строка, и я пытаюсь ее считать в переменную то вываливается ошибка
> VB:

А как пытаешся считать?

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
02.10.2008, 09:37
    #35571255
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
При вызове функции я использую пользовательский тип данных:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Type TMTEMsg
    DataLen As Long
    Data As String
End Type

'объявление функции из dll:
Private Declare Function DF_Structure& Lib "my.dll" _
    Alias "MTEStructure" ( _
    ByVal Idx As Long, _
    ByRef Msg As TMTEMsg)

'И собственно вызов: 
Dim Msg As TMTEMsg, Idx&

Idx = DF_Structure(Idx, Msg)


P.S. извини что долго не отвечала - заболела и провалялась 2 дня (
...
Рейтинг: 0 / 0
02.10.2008, 10:24
    #35571388
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
> Автор: Kallandor
> При вызове функции я использую пользовательский тип данных:
>
> Type TMTEMsg
> DataLen As Long
> Data As String
> End Type
>
> 'объявление функции из dll:
> Private Declare Function DF_Structure& Lib "my.dll" _
> Alias "MTEStructure" ( _
> ByVal Idx As Long, _
> ByRef Msg As TMTEMsg)
>
> 'И собственно вызов:
> Dim Msg As TMTEMsg, Idx&
>
> Idx = DF_Structure(Idx, Msg)

Вылетает на вызове функции, или при попытке считать данные из структуры Msg?
Может нужно перед вызовом сделать так:
'И собственно вызов:
Dim Msg As TMTEMsg, Idx&
Msg.Data = Space(255) 'Или сколько нужно
Idx = DF_Structure(Idx, Msg)

> P.S. извини что долго не отвечала - заболела и провалялась 2 дня (
То-то я думаю, чего начал заболевать, а это от тебя

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
02.10.2008, 11:42
    #35571640
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
...
Рейтинг: 0 / 0
02.10.2008, 12:59
    #35571966
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
Игорь Горбонос
Странно, но сейчас уже не вылетает. после того как я поставила
Код: plaintext
Msg.Data = Space( 255 )
И очень даже хорошо выполнилась функция из dll. Вот, но само поле Msg.Data у меня осталось одними пробелами, и после вызова функции, а вот значение Msg.DataLen вернуло совершенно другое число (как я понимаю это размер данных поля Msg.Data). Собственно мне кажется что надо создать указатель. Но как его задать - я не знаю. подскажи пожалуйста.

P.S. Не знала, что зараза может быть перенесена посредствам интернета из Москвы на Украину извини что заражаю

Бенедикт
Книга Дена Эппелмана у меня под рукой и я понимаю, что тип данных LPSTR-это 32-разрядный указатель на строку, завершенную null-символом. Только я вот не понимаю как эту строку мне считать в VB ((. Спасибо за ссылку очень полезно для ликбеза :)
...
Рейтинг: 0 / 0
02.10.2008, 14:31
    #35572424
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
Товарищи, ну помогите же немного туповатой програмисту-женщине Ну не понимаю я как из буффера считать данные, которые передались при вызове функции из dll в указатель на пользовательский тип данных.
Повторюсь тип данных объявлен как:
Код: plaintext
1.
2.
3.
4.
Type TMTEMsg
    DataLen As Long
    Data As String
End Type
как из этого типа данных считать данные в Data?
...
Рейтинг: 0 / 0
02.10.2008, 15:05
    #35572566
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
> Автор: Kallandor
> Товарищи, ну помогите же немного туповатой програмисту-женщине Ну не понимаю я как
> из буффера считать данные, которые передались при вызове функции из dll в указатель на
> пользовательский тип данных.

Пообедать дашь?

> Повторюсь тип данных объявлен как:
>
> Type TMTEMsg
> DataLen As Long
> Data As String
> End Type
> как из этого типа данных считать данные в Data?

судя по структуре и тому что я знаю, скорее всего перед вызовом функции нужно
инициализировать строку, обычно делаю это пробелами, а в поле DataLen положить длину этой
строки. Тогда при вызове в функции возможно идет считывание из DataLen длины
подготовленной строки и исходя из этого эта строка заполняется данными и в DataLen
записывается длина заполненных данных. Возможно нужно делать первый вызов "холостым" и в
DataLen смотреть какой длины нужна строка и распределять строку перед повторным вызовом.
Возможно есть ещё подводные рифы

я помог Kallandor*ВЫРЕЗАННО ЦЕНЗУРОЙ* програмисту-женщине?

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
02.10.2008, 15:19
    #35572621
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
Kallandor,
это не Эпплман. Почитайте.

Вариантов много. Вот, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
//в DLL
typedef struct tagTMTEMsg {
   LONG  DataLen;
   LPSTR Data;
} TMTEMsg, *PMTEMsg;

LONG WINAPI MTEStructure(LONG Idx, PMTEMsg Msg)
{
   strncpy(Msg->Data, "У попа была собака", Msg->DataLen);
   return strlen(Msg->Data);
}
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
'В VB/VBA
Private Sub Command2_Click()
 Dim Msg As TMTEMsg
 Dim lResult As Long
 Msg.DataLen =  255 
 Msg.Data = String$(Msg.DataLen,  0 )
 lResult = DF_Structure( 1 , Msg)
 Debug.Print "<" & Left$(Msg.Data, lResult) & ">"
End Sub
...
Рейтинг: 0 / 0
02.10.2008, 15:22
    #35572633
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
Игорь Горбонос

Ну не совсем помог :( Потому как я не понимаю что не правильно или чего не хватает в последовательности дейстий:
1.перед вызовом функции я инициализирую пробелами Msg.Data
2. Вызываю функцию DF_Structure
3. В поле Msg.DataLen действительно получается размер полученных данных

По моей логике (которая может отличаться от программной) после вызова DF_Structure в поле Msg.Data должны появляться собственно строковые данные, а их нет :( только пробелы, инициализированные в начале :( Что неправильно?
...
Рейтинг: 0 / 0
02.10.2008, 15:34
    #35572684
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
Бенедикт
Сделала так как вы подсказали. Debug.Print - ничего не вывел, видать потому что в Msg.Data содержатся null символы или что-то еще. В общем когда наводишь курсор на поле Msg.Data, то строка показана в виде квадратиков (ну как chr(13))
...
Рейтинг: 0 / 0
02.10.2008, 15:37
    #35572700
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
Kallandor,
бесполезный разговор без кода.
...
Рейтинг: 0 / 0
02.10.2008, 15:40
    #35572712
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
> Автор: Kallandor
> Игорь Горбонос
>
> Ну не совсем помог :( Потому как я не понимаю что не правильно или чего не хватает
> в последовательности дейстий:
> 1.перед вызовом функции я инициализирую пробелами Msg.Data
> 2. Вызываю функцию DF_Structure
> 3. В поле Msg.DataLen действительно получается размер полученных данных
>
> По моей логике (которая может отличаться от программной) после вызова DF_Structure
> в поле Msg.Data должны появляться собственно строковые данные, а их нет :( только
> пробелы, инициализированные в начале :( Что неправильно?


А что говорит документация к этой функции?

KallandorВ общем когда наводишь курсор на поле Msg.Data, то строка показана в виде
квадратиков (ну как chr(13))
Может эти квадратики и есть та информация, которая ожидается ;)

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
02.10.2008, 15:41
    #35572719
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
Вообще может выложишь свою длл, что-бы можно было посмотреть на неё поближе?

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
02.10.2008, 16:33
    #35572908
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
Игорь Горбонос
Вообще может выложишь свою длл, что-бы можно было посмотреть на неё поближе?

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4

Игорь, извини, но dll выложить наверное не могу
Описание поля Data:

Код: plaintext
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.
31.
32.
33.
34.
35.
36.
37.
Поле Data структуры TMTEMsg, указатель на которую возвращает функция 
MTEStructure, представляет собой бинарный массив данных. Данный буфер содержит описания о 
доступных для данной сессии информационных объектах и имеет следующий формат  (описание 
элементарных типов String, Integer и т.п. см. прил.  5 ):

поле			тип		
TInterface:						
ИмяИнтерфейса		String
ОписаниеИнтерфейса	String
ПеречислимыеТипы	TEnumTypes
Таблицы			TTables
Транзакции		TTransactions

Собственно описание информационных объектов состоит из трех блоков: описание перечислимых
 типов, таблиц и транзакций.

TEnumTypes:
КолвоТипов		Integer
Тип1			TEnumType
Тип2			TEnumType
...
ТипN			TEnumType

TEnumType:
Имя			String
Описание		String
Размер			Integer
Тип			TEnumKind
КолвоКонстант		Integer
Константа1		String
Константа2		String
...
КонстантаN		String

TEnumKind:		Integer
ekCheck =  0 		
ekGroup =  1 		
ekCombo =  2 

Вот, собственно когда я объявляю
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Type ArrStr
    dataArr() As Byte
End Type

Type TMTEMsg
    DataLen As Long
    Data As ArrStr
End Type
То в массиве dataArr появляются нолики (((
...
Рейтинг: 0 / 0
02.10.2008, 16:38
    #35572923
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
Почитал тему "Dll не подключается". Там есть такое сообщение:
KallandorКодов dll нет.

Вызов функции из dll:
Код: plaintext
1.
2.
3.
4.
5.
6.
'фунции из библиотеки mtesrl.dll
Private Declare Function DF_Connect Lib "mtesrl.dll" _
    Alias "MTEConnect" ( _
    ByVal Params As String, _
    ByVal ErrorMsg As String) As Integer

Текст ini
[GENERAL]
Logging=1
ClientLogsDir=./Logs
ClientLogLevel=2
ErrLog=./Logs/ErrorLog.txt

Пример описания и вызова функции на C++:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
(C language definition)
int32 WINAPI MTEConnect(char *Params, char *ErrorMsg);


... вызов
int32 Idx;
char ErrorMsg[ 255 ];
...
Idx = MTEConnect(“PORT=COM1\rBAUDRATE= 115200 ”, ErrorMsg);
if( Idx < MTE_OK )
{
fprintf(stderr, “Ошибка при установке соединения: %s”, ErrorMsg);
	exit( 1 );
}
else 
  fprintf(stdout, “Соединение установлено.”);


Во-первых, есть ошибочка:
Код: plaintext
1.
2.
3.
Private Declare Function DF_Connect Lib "mtesrl.dll" _
    Alias "MTEConnect" ( _
    ByVal Params As String, _
    ByVal ErrorMsg As String) As Long
Во-вторых, непонятны в этом контексте вопросы про передачу UDT.
В-третьих, Params входной параметр, ErrorMsg - выходной, сишный пример даёт образец для VB-кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
 Dim Idx As Long
 Dim ErrorMsg As String
 Dim NullCharPos As Long
 ErrorMsg = String$( 255 , vbNullChar)
 Idx = MTEConnect("PORT=COM1" & vbCr & "BAUDRATE=115200", ErrorMsg)
 NullCharPos = InStr(ErrorMsg, vbNullChar)
 If NullCharPos Then ErrorMsg = Left$(ErrorMsg, NullCharPos -  1 )
...
Рейтинг: 0 / 0
02.10.2008, 16:46
    #35572945
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
БенедиктВо-первых, есть ошибочка:
Код: plaintext
1.
2.
3.
Private Declare Function DF_Connect Lib "mtesrl.dll" _
    Alias "MTEConnect" ( _
    ByVal Params As String, _
    ByVal ErrorMsg As String) As Long
Во-вторых, непонятны в этом контексте вопросы про передачу UDT.
В-третьих, Params входной параметр, ErrorMsg - выходной, сишный пример даёт образец для VB-кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
 Dim Idx As Long
 Dim ErrorMsg As String
 Dim NullCharPos As Long
 ErrorMsg = String$( 255 , vbNullChar)
 Idx = MTEConnect("PORT=COM1" & vbCr & "BAUDRATE=115200", ErrorMsg)
 NullCharPos = InStr(ErrorMsg, vbNullChar)
 If NullCharPos Then ErrorMsg = Left$(ErrorMsg, NullCharPos -  1 )
[/quot]

С первым замечанием не согласна, потому как :Private Declare Function DF_Connect & Lib "mtesrl.dll" _
Alias "MTEConnect" ( _
ByVal Params As String, _
ByVal ErrorMsg As String) As Long

Дальше. Я действительно не знаю разницу в объявлении переменных, используемых dll через API, при входных и выходных параметрах
Ну а на счет третьего замечания полностью согласна, так как исключить Null-символы действительно надо, только я думала, заменить их replace

Собственно вопрос то остался по вызову другой функции, коннект проходит успешно.
...
Рейтинг: 0 / 0
02.10.2008, 16:59
    #35572988
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
Kallandor,
я указывал на несоответствие сишного прототипа DF_Connect VB-шному (в рамках того сообщения; может быть, Вы его уже поправили в реальном коде, но по обсуждению этого не видно).

Про DF_Structure(). Не стоит рассматривать поле Data как строковое, судя по описанию. Я бы в Declare параметр вообще написал As Any, и передавал первый байт байтового массива. Есть способ определить его размер заранее? Или ограничение на длину? Кстати, как описаны элементарные типы в "прил. 5"?
...
Рейтинг: 0 / 0
02.10.2008, 17:12
    #35573018
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
БенедиктKallandor,
я указывал на несоответствие сишного прототипа DF_Connect VB-шному (в рамках того сообщения; может быть, Вы его уже поправили в реальном коде, но по обсуждению этого не видно).

Про DF_Structure(). Не стоит рассматривать поле Data как строковое, судя по описанию. Я бы в Declare параметр вообще написал As Any, и передавал первый байт байтового массива. Есть способ определить его размер заранее? Или ограничение на длину? Кстати, как описаны элементарные типы в "прил. 5"?

C первым абзацем согласна - потому как не помню
По второму абзацу:
1. Если я объявляю поле Data as Variant, то тоже пустота.
2. Зараннее нет способа определить размер, ограничения на длину тоже нет
3.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Приложение  5 . Элементарные типы
Для представления элементарных типов в библиотеке MTESRL.DLL используются следующие структуры:
Byte
Один байт.

Integer
Четыре байта в формате процессоров x86 (сначала наименее значащий байт).

String
Структура следующего вида:

ДлинаСтроки: Integer
ТекстСтроки: Byte[ДлинаСтроки]

Byte[N]
Массив байт длиной N.
4. Собственно как именно следует определять поле Data? Даже если передавать первый байт, приведите пожалуйста пример. Так как я не понимаю :(
...
Рейтинг: 0 / 0
02.10.2008, 17:40
    #35573090
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
> Автор: Kallandor

Кстати о птичках!
А каков KallandorПример описания и вызова функции на C++: для этой функции?


--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
02.10.2008, 17:49
    #35573111
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
--
С уважением Горбонос Игорь Леонидович
"Игорь Горбонос" <nospam@sql.ru>; сообщил/сообщила в новостях следующее:
news:6258207@sql.ru...
> Автор: Игорь Горбонос
>
Отсюда скачал описание.
там написанно:
Получение описания информационных объектов
Описание информационных объектов торговой системы содержит список таблиц, транзакций, их
полей и некоторых вспомогательных объектов, доступных клиенту. Для получения описания
используется функция MTEStructure.



function MTEStructure(Idx: Integer; var Msg: PMTEMsg): Integer;

Аргументы:

Idx

Дескриптор соединения, для которого нужно получить информацию.

Msg

Адрес переменной (имеющей тип "указатель на TMTEMsg"), куда будет помещен указатель на
буфер, содержащий описание информационных объектов. Формат буфера описан в приложении 1.
Структура TMTEMsg определена так:

PMTEMsg = ^TMTEMsg;

TMTEMsg = record

DataLen: Integer; // Длина следующих далее данных

Data: record end; // Данные переменной длины

end;

Насколько я знаю делфи, то рекорд это структура, давай описание этой структуры

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
02.10.2008, 17:52
    #35573114
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
Код: plaintext
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
Получение описания информационных объектов Описание информационных объектов 
содержит список таблиц, транзакций, их полей и некоторых вспомогательных объектов, доступных 
клиенту. Для получения описания используется функция MTEStructure.

(C language definition)
int32 WINAPI MTEStructure(int32 Idx, TMTEMsg **Msg);

(Delphi language definition)
function MTEStructure(Idx: Integer; var Msg: PMTEMsg): Integer;

Аргументы:
Idx
Дескриптор соединения, для которого нужно получить информацию.
Msg
Указатель на указатель структуры TMTEMsg, куда будет помещен указатель на буфер, содержащий описание информационных объектов. Формат буфера описан в приложении  2 .
Память под данный буфер выделяется и освобождается библиотекой. Структура TMTEMsg определена так:

-------- C language --------
typedef struct TMTEMSG_TAG
{
long DataLen; // Длина следующих далее данных
// char Data[DataLen];// commented – pseudo field
} TMTEMSG;
, причем данные длиной DataLen следуют непосредственно за данными данной структуры. Это 
сделанно для обеспечения совместимости с продуктами реализованными на Delphi. 

-------- Delphi language ---------
PMTEMsg = ^TMTEMsg;
TMTEMsg = record
  DataLen: Integer;  // Длина следующих далее данных
  Data: record end;  // Данные переменной длины
end;




Доступ к данным описания может выглядеть следующим образом:

-------- C language --------
int32 Idx;
char ErrorMsg[ 255 ];
TMTEMsg *Msg;
char *Data;
int32 err;
...
Idx = MTEConnect(“PORT=COM1\rBAUDRATE= 115200 ”, ErrorMsg);
if( Idx < MTE_OK )
{
fprintf(stderr, “Ошибка при установке соединения: %s”, ErrorMsg);
	exit( 1 );
}
else 
  fprintf(stdout, “Соединение установлено.”);

if( (err = MTEStructure(Idx, &Msg)) != MTE_OK )
{
if( Err == MTE_TSMR )
{ 
 		Data = (char *)(Msg +  1 );
	fprintf(stderr, “Ошибка: %s\n”, Data ); 
}
else
fprintf(stderr, “Ошибка: %s\n”, MTEErrorMsg(Err));
	}
else
  fprintf(“Описание информационных объектов получено.\n”);
Data = (char *)(Msg +  1 ); // Собственно данные

-------- Delphi language ---------
Idx: Integer;	// Инициализирована вызовом MTEConnect
Err: Integer;
Msg: PMTEMsg;
S: string;
...
Err := MTEStructure(Idx, Msg);
if Err <> MTE_OK then 
  if Err = MTE_TSMR then 
  begin
    SetString(S, @Msg.Data, Msg.DataLen);
    Writeln('Ошибка: ' + S);
  end
  else
    Writeln('Ошибка: ' + MTEErrorMsg(Err))
else
  Writeln('Описание информационных объектов получено.);

Возвращаемое значение:
В случае успеха функция возвращает MTE_OK и помещает в аргумент Msg указатель на буфер с 
описанием.
При возникновении ошибки возвращается один из кодов ошибки MTE_xxxx. Если возвращен код 
ошибки MTE_TSMR, поле Data структуры Msg  содержит текст сообщения об ошибке длиной DataLen символов.
...
Рейтинг: 0 / 0
02.10.2008, 17:55
    #35573122
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
есть большое подозрение, что ту dll писали не для юзайнья из VB
...
Рейтинг: 0 / 0
02.10.2008, 17:57
    #35573127
Kallandor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
null-терминированная строка
Собственно у меня еще один вопрос:
Если мне нужно создать пользовательский тип данных, одно из значений которого будет типа string, а другое может принимать только определенные значения могу ли я написать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
type MyType2
   Const a1% =  0 
   Const a2% =  1 
   Const a3% =  2 
end Type

type MyType
   aaa as String
   bbb as MyType2
end type

...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / null-терминированная строка / 25 сообщений из 49, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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