Поскольку файл является просто потоком байтов, из любого байта , включая нулевой байт. Некоторые файлы называются текстовыми файлами, когда они содержат только подмножество всех возможных байтов: печатаемые (примерно буквенно-цифровые, пробелы, знаки пунктуации).
C-строки представляют собой последовательность байтов, оканчивающихся нулевым байтом, просто вопрос соглашения. Они слишком часто являются источником путаницы; просто последовательность, оканчивающаяся нулем, означает, что любой ненулевой байт, оканчивающийся нулем, является правильной строкой C! Даже тот, который содержит непечатаемый байт или контрольный символ. Будьте осторожны, потому что ваш пример не C! В C printf("dummy\000foo");
никогда не будет печатать foo
, поскольку printf
будет рассматривать строку C, начинающуюся с d
и заканчивающуюся нулевым байтом в середине. Некоторые компиляторы жалуются на такой строковый литерал C.
Теперь нет прямой связи между строками C (которые обычно также содержат только печатные символы) и текстовым файлом. В то время как печать строки C в файл обычно заключается в сохранении только ее подпоследовательности ненулевых байтов.
В командной строке:
SET PATH = "%PATH%;%SystemRoot%\Microsoft.NET\Framework\v2.0.50727"
Вам не нужен каталог на вашем пути. Вы можете поставить это на свой путь, но вам НЕ НУЖНО этого делать.
Если вы редко вызываете regasm или вызываете его из командного файла, вы можете обнаружить, что проще просто вызвать regasm через полный путь к исполняемому файлу, например:
c:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe MyAssembly.dll
В пакетном файле я использую следующее:
path = %path%;C:\Windows\Microsoft.NET\Framework\v2.0.50727
regasm httpHelper\bin\Debug\httpHelper.dll /tlb:.\httpHelper.tlb /codebase
pause
Как сказал Чизо:
Вам не нужен каталог на вашем пути. Вы можете поставить это на свой путь, но вам не нужно этого делать. Если вы редко вызываете regasm или вызываете его из командного файла, вы можете обнаружить, что проще просто вызвать regasm через полный путь к исполняемому файлу, например:
% SystemRoot% \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm.exe MyAssembly.dll
Я использую это как событие после сборки в Visual Studio:
call "%VS90COMNTOOLS%vsvars32.bat"
regasm $(TargetPath) /tlb
В зависимости от версии вашей Visual Studio, используйте эти переменные окружения вместо этого:
VS90COMNTOOLS
VS100COMNTOOLS
VS110COMNTOOLS
VS120COMNTOOLS
VS140COMNTOOLS
VS150COMNTOOLS