Я только что создал простой PDF-документ, содержащий слово «Тест», и создал из него поток байтов в консольном приложении С#:
buff = File.ReadAllBytes(<Path of File>);
Размер файла составляет около 9651 байт. Я также создал dll Win32 C, которая экспортирует функцию, которая принимает массив байтов файла и длину массива байтов в качестве аргумента, объявленного в C #, используя это:
[DllImport("<path to dll>", CallingConvention = CallingConvention.Cdecl)]
public static extern int file_data(byte[] byteArray, int length);
Метод в C dll экспортируется, как показано ниже:
#define FILEDATA_API __declspec(dllexport)
FILEDATA_API int file_data(char *byteArray, int size);
Затем я вызвал ret = file_data(buff, buff.length)
; и в коде C записал указатель символа, полученный непосредственно во временный файл, символ за символом, как показано ниже:
while (length> 0)
{
fprintf(outFile, "%c", *fileData); //fileData is the actual byte array received from C# Code
fileData++;
length--;
}
Но здесь возникает проблема: код C, который выгружает массив байтов в файл посимвольно, генерирует файл размером 9755 байт. Большая часть содержимого внутри выглядит правильно, за исключением некоторых новых строк, которые вводятся (насколько я знаю, и могут быть некоторые дополнительные данные), что приводит к повреждению файла PDF, и эта выгруженная версия не открывается в Adobe. . Может кто-нибудь, пожалуйста, подскажите, где я могу ошибаться? Я не могу использовать %s in fprint
, так как некоторая комбинация массива байтов в PDF приводит к строке с нулевым завершением в C, которая затем выводит даже меньше данных, чем я ожидаю.
Спасибо.
ОБНОВИТЬ:
- Желаемое поведение состоит в том, что массив байтов файла, полученный от C# и записанный с использованием кода C в файл, должен обеспечить успешное открытие файла в Adobe.
- Кода, представленного в проблеме, должно быть достаточно для того, чтобы кто-то сгенерировал dll win32, который просто записывает указатель char в файл, но я добавил еще несколько деталей.
outFile
? Вы пробовали использоватьfwrite
вместоfprintf
? - person cbr   schedule 27.11.2015int file_data(char *byteArray, int size);
- person learn_develop   schedule 27.11.2015"w"
, есть ли какие-либо проблемы с использованиемfprintf
? Я определенно могу попробоватьfwrite
и посмотреть, сработает ли это. - person learn_develop   schedule 27.11.2015