如何从Monotouch调用私有API?

时间:2011-01-12 11:07:03

标签: c# iphone ipad xamarin.ios uitextview

我对Monotouch中P/Invoke的了解非常可怕,我想为UITextView(特别是setContentToHTMLString)调用私有iOS API,我不知道在哪里甚至从这开始。

如果有人能告诉我这是怎么做的(或者甚至从哪里开始!)那将是非常棒的。

请注意,这是我正在做的个人项目,主要是为了拓宽我的知识面。此应用程序提交到应用商店的可能性非常小,因此不受App Store规定/ Apple更改它的可能性的限制。

修改

仅仅是使用Selector的情况吗?

2 个答案:

答案 0 :(得分:2)

使用选择器调用它的最简单方法,如下所示:

Selector s = new Selector("myPrivateAPIMethodName");
MyObjectToCallTheMethodOn.PerformSelector(s, parameterOfTheObject, 0);

当然,要非常小心这一点.. Apple不会容忍你的应用程序上的私有API调用,所以如果你打算像你想要的那样使用类似的东西去AppStore,他们会拒绝你的应用。

答案 1 :(得分:0)

如果您尝试调用私有.net方法,则可以使用反射。

您可以使用以下代码作为示例:

            object oToInvoke;

        //Get the type of object
        Type t = typeof( oToInvoke );

        //Invoke 'PrivateMethodName'
        return t.InvokeMember( "PrivateMethodName",
                          System.Reflection.BindingFlags.NonPublic
                        | System.Reflection.BindingFlags.Instance
                        | System.Reflection.BindingFlags.InvokeMethod
                        , null
                        , oToInvoke
                        , null );

这将允许调用可以具有返回类型的方法。您只需要转换InvokeMember的返回类型

在System.Reflection命名空间

希望有所帮助!