Я пишу Win32 DLL в MSVC ++ 2010 с экспортированными функциями. Некоторые из этих функций возвращают имена файлов как LPCSTR
. Так как мне иногда приходится возиться со строками раньше, я в настоящее время использую глобальную буферную переменную длиной 32184, которая должна охватывать любое имя файла, которое может возникнуть в Windows, которое я затем всегда инициализирую и возвращаю, где нужна строка.
Мой босс использует эту библиотеку из унаследованного приложения VB6. Теперь он сообщил мне, что ему нужно, чтобы он был потокобезопасным: к сожалению, из-за поведения VB6, управляемого событиями, может случиться так, что функция вызывается в моей библиотеке, даже если другая функция еще не возвращена. Это, конечно, означает, что я не могу полагаться на один внутренний буфер, но мне приходится создавать его каждый раз, когда он мне нужен, а затем возвращать его.
2 вопроса:
Я сильно полагаюсь на функции Windows API, такие как FindFirstFile
и функции Boost из библиотек filesystem
и regex
. Могу ли я предположить, что они все потокобезопасны?
Если мне нужно создавать новый буфер в куче каждый раз, когда я хочу вернуть строку, где мне снова освободить память?