Я пытаюсь получить данные изображения Tiff через COM, используя StringBuilder, но длина буфера после вызова COM составляет всего 3. Я конвертирую версию VB.NET в C #, который использует String вместо StringBuilder и работает просто отлично. Если у кого-нибудь есть какие-либо предложения или я могу указать мне хороший материал для чтения, я был бы признателен.
подпись функции COM:
ULONG MTMICRGetImage (char *pcDevName, char *pcImageID, char *pcBuffer, DWORD *pdwLength
);
[DllImport("mtxmlmcr", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern Int32 MTMICRGetImage(string DeviceName, string ImageId, StringBuilder ImageBuffer, ref Int32 ImageSize);
Код вызова COM:
ImageSize = Convert.ToInt32(mtValue.ToString());
TempImage = new StringBuilder(ImageSize);
mtValueSize = 9216;
RC = MTMICRGetIndexValue(mtDocInfo, "ImageInfo", "ImageURL", 2, mtValue, ref mtValueSize);
// Allocate memory for image with size of ImageSize
RC = MTMICRGetImage(ExcellaDeviceName, mtValue.ToString(), TempImage, ref ImageSize);
РЕДАКТИРОВАТЬ: Я полагаю, что это связано с двоичными данными и как это маршаллово, символ 4 в строке является нулевым символом. Согласно Marshal.PtrToStringAuto () / Marshal.PtrToStringUni (), копируются все символы до первого нулевого символа.