我從GIT上的VFR PDF查看器中看到一段ObjC代碼。 它使用CGPDFDictionaryGetString
獲取一個指針從PDF註釋的字符串。然後它使用一些字節指針轉換來獲得最終的字符串。 在MonoTouch的沒有CGPDFDictionary.GetString()
但只有.GetName()
- 這是返回一個字符串的唯一方法,所以我認爲一定是正確的方法,但它不能正常工作。 我可以檢索數組,字典,浮點數和整數就好 - 只有字符串似乎不工作。這個CGPDFDictionaryGetString如何轉換成Monotouch?
請參見下面的小的代碼的例子。
CGPDFStringRef uriString = NULL;
// This returns TRUE in the ObjC version and uriString is a valid pointer to a string.
if (CGPDFDictionaryGetString(actionDictionary, "URI", &uriString) == true)
{
// Do some pointer magic - how to do this in MT? Do I have to at all?
const char *uri = (const char *)CGPDFStringGetBytePtr(uriString);
// *uri now contains a URL, I can see it in the debugger.
}
我把它翻譯這樣的:
string sUri = null;
// This returns FALSE. Hence my sUri is NULL. Seems like GetName() is not the analogy to CGPDFDictionaryGetString.
if(oActionDic.GetName("URI", out sUri))
{
// I never get here.
}
編輯: // TODO: 望着單聲道音源,我可以在主分支看到的GetString - >返回CGPDFString
切換到分支4.2表明,它似乎是在那裏。所以我複製了代碼,但有兩個問題:
- 我收到有關「不安全」關鍵字的錯誤。它告訴我添加「不安全」的命令行選項。那是什麼,添加它是一個好主意?哪裏?
- 這似乎無論如何運行,但得到CGPDFString當應用程序掛起。
[的DllImport(Constants.CoreGraphicsLibrary)] 公共的extern靜態的IntPtr CGPDFStringGetLength(IntPtr的pdfStr);
[DllImport (Constants.CoreGraphicsLibrary)]
public extern static IntPtr CGPDFStringGetBytePtr (IntPtr pdfStr);
public static string PdfStringToString (IntPtr pdfString)
{
if (pdfString == IntPtr.Zero)
return null;
int n = (int)CGPDFStringGetLength (pdfString);
unsafe
{
return new String ((char *)CGPDFStringGetBytePtr (pdfString), 0, n);
}
}
[DllImport (Constants.CoreGraphicsLibrary)]
extern static bool CGPDFDictionaryGetString (IntPtr handle, string key, out IntPtr result);
public static bool GetStringFromPdfDictionary (CGPDFDictionary oPdfDic, string key, out string result)
{
if (key == null)
throw new ArgumentNullException ("key");
IntPtr res;
if (CGPDFDictionaryGetString (oPdfDic.Handle, key, out res))
{
result = PdfStringToString (res);
return true;
}
result = null;
return false;
}
爲什麼使用不安全?似乎沒有必要。 –
而不是隻在不安全塊中允許的指針操作嗎? – Krumelur
使用'Marshal'類從空終止的字符串複製到.net字符串 –