Это продолжение моего последнего вопроса .
Теперь у меня есть byte[]
значений для моего растрового изображения. В конце концов я передам строку в диспетчер очереди печати формата String.Format("GW{0},{1},{2},{3},", X, Y, stride, _Bitmap.Height) + my binary data;
Я использую команду SendBytesToPrinter
из здесь .
Вот мой код, чтобы отправить его на принтер
public static bool SendStringPlusByteBlockToPrinter(string szPrinterName, string szString, byte[] bytes)
{
IntPtr pBytes;
Int32 dwCount;
// How many characters are in the string?
dwCount = szString.Length;
// Assume that the printer is expecting ANSI text, and then convert
// the string to ANSI text.
pBytes = Marshal.StringToCoTaskMemAnsi(szString);
pBytes = Marshal.ReAllocCoTaskMem(pBytes, szString.Length + bytes.Length);
Marshal.Copy(bytes,0, SOMTHING GOES HERE,bytes.Length); // this is the problem line
// Send the converted ANSI string + the concatenated bytes to the printer.
SendBytesToPrinter(szPrinterName, pBytes, dwCount);
Marshal.FreeCoTaskMem(pBytes);
return true;
}
Моя проблема в том, что я не знаю, как сделать так, чтобы мои данные добавлялись в конец строки. Любая помощь будет принята с благодарностью, и если я делаю это совершенно неправильно, я могу пойти совершенно другим путем (например, каким-то образом связать двоичные данные со строкой до перехода в неуправляемое пространство.
P.S.
Второй вопрос: переместит ли ReAllocCoTaskMem данные, которые в нем находятся, перед вызовом в новое местоположение?