セットアップ
以下に定義されているネイティブ関数を持つPDFAPIがあります。
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ラッパー関数で上記のコードを呼び出すと、正しい文字列が返されますが、PDF_CloseDocを呼び出すとAccessViolationExceptionがスローされます。WOOPS。ドキュメントのポインタを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);
}
また、buffer [0]を固定しようとしましたが、GetMetaTextでアクセス違反の例外が発生します。
質問
GetMetaTextで何が起こっているのかわからないので、pdocに何が起こっているのかわかりません。上記のコードに対する提案はありますか?