質問

セットアップ

以下に定義されているネイティブ関数を持つPDFAPIがあります。 ジェネラコディセタグプレ

C ++ / CLIラッパー関数で上記のコードを呼び出すと、正しい文字列が返されますが、PDF_CloseDocを呼び出すとAccessViolationExceptionがスローされます。WOOPS。ドキュメントのポインタをpin_ptrするのを忘れました。

問題

pdocをpin_ptrすると、これらのネイティブ関数を正常に呼び出すことができますが、PDF_GetMetaTextが返されると、バッファに文字列が含まれなくなります。 ジェネラコディセタグプレ

buffer [0]の固定も試しましたが、GetMetaTextでアクセス違反の例外が発生します。

質問

GetMetaTextで何が起こっているのかわからないので、pdocに何が起こっているのかわかりません。上記のコードに対する提案はありますか?

役に立ちましたか?

解決

これは意味がありません。管理対象オブジェクトのみを固定できます。PDF_LoadDoc()の戻り値は、私には管理対象オブジェクトのようには見えません。 result についても同じことが言えます。これは、管理されたジェネラコディセタグコードではなく、スタックフレームに割り当てられる単なるバニラC配列です。残念ながら、pin_ptr <>はこれについて文句を言いません。

result 配列は、コードがスタックフレームを踏みつけている場合にのみ、「空」になる可能性があります。最初の要素にデータブレークポイントを設定することで診断できます。Fwiw、SystemStringToCStr()は候補のように見えます。これは、ネイティブ文字列のバッファをどこかで解放しないと機能しません。もう1つの候補は、PDFAPI関数宣言です。ESPレジスタの値に注意し、変化しないことを確認してください。含まれている場合、適切な呼び出し規約がないため、スタックのバランスが崩れます。これは通常、DLLエクスポートの場合は__stdcallです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top