Size_t == sizeof (uint64_t) не возвращает ожидаемые результаты [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Size_t == sizeof (uint64_t) не возвращает ожидаемые результаты [закрыто]

Сообщение Anonymous »

Я компилирую C++ DLL из достаточно хорошо проверенной библиотеки (zeromq) и использую ее в своих собственных привязках Delphi. В настоящее время я сталкиваюсь с неожиданным поведением кода C++, и у меня нет опыта для его хорошей отладки. Основная ответственность за ошибку, вероятно, лежит на моем коде Delphi, но мне нужно лучше понимать C++, чтобы понять, что я сделал не так.
Проблемный код выглядит следующим образом (упрощенно)
Проблемный код выглядит следующим образом (упрощенно)
p>
if (*mySize_tObject == sizeof (uint64_t)) {
return 0;//We never reach this code.
}

*mySize_tObject передается как size_t. В моих привязках Delphi это Cardinal со значением 8.
Я попробовал поиграться с выводами C++, чтобы сузить то, что может произойти, и получил эти результаты:
return *mySize_tObject;//8
return sizeof (uint64_t);//8
return *mySize_tObject + sizeof (uint64_t);//16

if (*mySize_tObject == sizeof(uint64_t)) {
return 1;
}
else if (*mySize_tObject < sizeof(uint64_t)) {
return 2;
}
else if (*mySize_tObject > sizeof(uint64_t)) {
return 3;//This is the value that returns
}
else {
return 0;
}

По сути, я возвращаюсь к 8>8. Поскольку я знаю, что это неправда (нужна ссылка), мне остается думать, что одно из этих значений тайно является числом с плавающей запятой, например 8,000001, и я вижу только усеченные результаты.
Я также рассмотрю советы по отладке .dll, если это не имеет никакого смысла для людей, знающих C++.
Думаю, стоит также отметить, что ранее у меня был Привязки Delphi работают в 32-битной версии, и я начал сталкиваться с этими трудностями при преобразовании в 64-битную версию (я также изменил настройки компиляции DLL, чтобы они соответствовали).
Приношу извинения за то, что не смог создать минимальную воспроизводимую версию. пример, но я постараюсь дать как можно больше подробностей о своих вызовах здесь:
Привязка Delphi:
TMyBinding = function(var mySize_tObject : size_t): Integer; cdecl;

Передаваемое значение создается как SizeOf( result ), причем result представляет собой Int64.
*Примечание: size_t определяется в другом месте кода Delphi как кардинал.
Заголовок этой функции в C++:
int myFunct(size_t *mySize_tObject ) const;


Подробнее здесь: https://stackoverflow.com/questions/784 ... ed-results
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»