Настройка
У меня есть PDF API, который имеет встроенную функцию, которая определена ниже.
typdef void* PDF_DOCUMENT;
unsigned long PDF_GetMetaText(PDF_DOCUMENT document,
const char tag,
void* buffer,
unsigned long bufferlen)
//Calling it "natively" in C++/CLI function to get the PDF Creator tag
WCHAR result[32];
void* pdoc = PDF_LoadDoc("C:\test.pdf");
int numChars = PDF_GetMetaText(pdoc, "Creator", result, 32);
PDF_CloseDoc(pdoc);
если я вызываю приведенный выше код в моей функции-оболочке C ++ / CLI, он возвращает правильную строку, но выдает AccessViolationException, когда я вызываю PDF_CloseDoc. Гребенки. Я забыл pin_ptr указатель документа.
Проблема
Когда я pin_ptr pdoc, я могу успешно вызывать эти встроенные функции, однако в буфере больше не содержится моя строка, когда возвращается PDF_GetMetaText.
String^ Wrapper::GetCreator(String^ filename)
{
WCHAR buffer[32];
void *pdoc = PDF_LoadDoc(SystemStringToCStr(filename));
pin_ptr<void*> p = &pdoc; //added
int numPages = PDF_GetMetaText(p, "Creator", buffer, 32);
PDF_CloseDocument(p); //doesnt crash, but at this line buffer is an empty string
return gcnew String(buffer);
}
Я также попытался закрепить буфер [0], но это вызывает исключение нарушения прав доступа в GetMetaText.
Вопрос
Я не могу сказать, что происходит в GetMetaText, поэтому я не уверен, что происходит с pdoc. Любые предложения к вышеуказанному коду?