vsnprintf эквивалент в Delphi? - PullRequest
       12

vsnprintf эквивалент в Delphi?

1 голос
/ 20 января 2011

Я сейчас перевожу заголовок C на delphi.Есть ли какая-либо функция в Delphi, которая может заменить vsnprintf языка C?или это присутствует в любой распространенной DLL?

int vsnprintf(char *str, size_t size, const char *format, va_list ap);

Ответы [ 5 ]

2 голосов
/ 20 января 2011

Ближайшая функция эквивалентности существует в Delphi, это FormatStr.Прототип:

function Format ( Const Formatting : string; Const Data : array of const ) : string;
function Format ( Const Formatting : string; Const Data : array of const; FormatSettings : TFormatSettings ) : string;

Он принимает строку управления форматом, список значений для форматирования и возвращает отформатированную строку.

2 голосов
/ 20 января 2011

На ваш вопрос почти ответили Delphi "массив констант" для "varargs"

0 голосов
/ 20 января 2011

Windows предоставляет wvnsprintf. Это функция API, а не функция времени выполнения Си. В документации настоятельно рекомендуется использовать вместо этого одну из «безопасных» строковых функций , например StringCbVPrintf; wvsnprintf не гарантирует нулевое завершение результата.

0 голосов
/ 20 января 2011

Вы можете создать ссылку на msvcrt.dll, чтобы получить функции времени выполнения C.Это компонент Windows, а не часть среды выполнения Visual Studio.Таким образом, можно полагаться на его присутствие.

Если вы сделаете это, будьте осторожны, если вам случится использовать функцию, которая выделяет кучу.Если вам нужно сделать это, вам нужно будет освободить эту память с помощью того же менеджера памяти.Одна хитрость заключается в использовании malloc из msvcrt.dll для замены менеджера памяти Delphi.

Я не говорю, что это лучший способ решить вашу текущую проблему.В долгосрочной перспективе вам может быть выгоднее использовать собственное решение Delphi, которое переносимо, когда Delphi поддерживает платформы, отличные от Windows.

0 голосов
/ 20 января 2011

vsnprintf() реализовано в реализации библиотеки времени выполнения компилятора Си.Он не существует в DLL.В Delphi нет эквивалента.Все, что вы переводите, должно быть переписано для использования собственных функций Delphi.Пожалуйста, покажите, что вы переводите.

...