powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Во что надо преобразовывать C++ -ное PUInt64 ?
5 сообщений из 5, страница 1 из 1
Во что надо преобразовывать C++ -ное PUInt64 ?
    #37923450
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну т.е. в C-шной структуре имеем:
PUInt64 m_totalBytes;
unsigned m_totalPackets;

Если в VB-шной структуре при этом наляпать (общение через API):
m_totalBytes As Long
m_totalPackets As Long

то VB-приложения крашит.

Если C-шную структуру переписать в виде

unsigned m_totalBytes;
unsigned m_totalPackets;

то VB-приложение работает, но при этом C-шная библиотека при компиляции подругивается, мол можете потерять данные при конвертации PUInt64->unsigned, потому что там в оригинальном параметре PUInt64
А вдруг и вправду потеряю?

Что надо писать в VB структуре (Type), чтоб в C оставить PUInt64?
...
Рейтинг: 0 / 0
Во что надо преобразовывать C++ -ное PUInt64 ?
    #37923500
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77,

Вот так и написано - PUInt64? Не PUINT64? В любом случае, вопрос неполон без приведения описания этого типа (а в библиотеке могли своё описание сделать). Хорошо, предположим, что
Код: plaintext
1.
typedef UINT64 *PUINT64;

и размер указателя 32 бита.

Теперь о краше. Судя по названию, m_totalBytes, библиотечная функция должна заполнять этот счётчик при вызове. Значит, она ожидает, что это поле вызывающей стороной заполняеЦЦа корректным значением (и, видимо, на NULL нет проверки), а именно адресом (VarPtr) счётчика. Счётчик в VB можно сделать As Currency (с учётом умножения на 10000), либо как UDT из двух Long-ов.
...
Рейтинг: 0 / 0
Во что надо преобразовывать C++ -ное PUInt64 ?
    #37923520
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦаВот так и написано - PUInt64? Не PUINT64? В любом случае, вопрос неполон без приведения описания этого типа (а в библиотеке могли своё описание сделать).
Код: plaintext
1.
2.
  typedef signed __int64 PInt64;
  typedef unsigned __int64 PUInt64;


ЦЦаа именно адресом (VarPtr) счётчика.Нет там не Ptr, там переданные байты в явном целом виде возвращаются.
0 она без проблем возвращает
Если переобозвать в unsigned в структуре в C, то байты исправно возвращает.
ЦЦа либо как UDT из двух Long-овКак это записать на VB6?
...
Рейтинг: 0 / 0
Во что надо преобразовывать C++ -ное PUInt64 ?
    #37923535
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77,

Ну, тогда
Код: vbnet
1.
2.
m_totalBytes As Currency
m_totalPackets As Long

Про Currency надо помнить про множитель/делитель на 10000, и что он signed (но поскольку траффик в эксабайты слабо представляеЦЦа, можно забить).

Дмитрий77Как это записать на VB6?Я удивляеЦЦа.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Type INT64
   LowPart As Long
   HighPart As Long
End Type

Type TrafficStats
   m_totalBytes As INT64
   m_totalPackets As Long
End Type
...
Рейтинг: 0 / 0
Во что надо преобразовывать C++ -ное PUInt64 ?
    #37923580
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа,

Я оставил так в C коде:

unsigned m_totalBytes;
unsigned m_totalPackets;

Хрен с ними с Warning-гами. Иначе VB6 выпадает, чего бы я в VB ни писал, причем совсем не в том месте кода где эта структура передается или принимается.

А вообще я пока не решил, нужны ли мне эти m_totalBytes.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Во что надо преобразовывать C++ -ное PUInt64 ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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