Binding 将静态库绑定到Xamarin.iOS时未找到CGImageRef
我正在尝试绑定一些*.framework库,其中使用了Binding 将静态库绑定到Xamarin.iOS时未找到CGImageRef,binding,xamarin.ios,mono,core-graphics,static-libraries,Binding,Xamarin.ios,Mono,Core Graphics,Static Libraries,我正在尝试绑定一些*.framework库,其中使用了CoreGraphics。 因此,Sharpie生成的代码如下: // +(CGImageRef)rotateCGImage:(CGImageRef)image byRadians:(double)radians; [Static] [Export ("rotateCGImage:byRadians:")] unsafe CGImageRef* RotateCGImage (CGImageRef* image,
CoreGraphics
。
因此,Sharpie生成的代码如下:
// +(CGImageRef)rotateCGImage:(CGImageRef)image byRadians:(double)radians;
[Static]
[Export ("rotateCGImage:byRadians:")]
unsafe CGImageRef* RotateCGImage (CGImageRef* image, double radians);
static extern CGImagePixelFormatInfo CGImageGetPixelFormatInfo (/* __nullable CGImageRef */ IntPtr handle);
static extern IntPtr /* CFStringRef */ CGImageGetUTType (/* __nullable CGImageRef* */ IntPtr image);
然而,当尝试构建它时,我收到了类似“CGImageRef找不到”的错误消息。
此外,我在汇编资源管理器中的CoreGraphics
的成员列表中找不到相应的类。
(与使用CoreGraphics的相同;
没有帮助。)
看起来Mono不支持这个类(或结构):我在常规的iOS项目库中也找不到它
实际上,有许多类似的“ref-like”类被遗漏了:CMSampleBufferRef
fromCore Media
,CVImageBufferRef
fromCore Video
等
那么,我如何处理这种情况呢?请尝试以下解决方案:
CGImageRef
在Xamarin中不存在。在Obj-C中,cgimagerf
只是一个指向CGImage
的指针,因此我认为您可以将所有这些cgimagerf
更改为CGImage
我认为应该是这样的:
[Static]
[Export("rotateCGImage:byRadians:")]
unsafe CGImage RotateCGImage(CGImage image, double radians);
与项目中的其他“…Ref
”相同。根据我的发现(以及Xamarin团队在其框架内使用的方法之一),解决方案如下:
// +(CGImageRef)rotateCGImage:(CGImageRef)image byRadians:(double)radians;
[Static]
[Export ("rotateCGImage:byRadians:")]
unsafe CGImageRef* RotateCGImage (CGImageRef* image, double radians);
static extern CGImagePixelFormatInfo CGImageGetPixelFormatInfo (/* __nullable CGImageRef */ IntPtr handle);
static extern IntPtr /* CFStringRef */ CGImageGetUTType (/* __nullable CGImageRef* */ IntPtr image);
因此,由于C#托管体系结构,没有显式的指针来实现,这就是为什么他们没有在Mono上创建任何类似*Ref的类
这里要指出的唯一一点是,它们在这两种情况下都通过了IntPtr
:cgmageref
和cgmageref*
,这当然有意义。然而,诀窍在于将CGImage指针正确地传递到调用方法内部,因为在第一种情况下,它必须是这样的:
image == null ? IntPtr.Zero : image.Handle
因此,传递CGImage的指针。但在第二种情况下,我想它一定是指向句柄的指针。Hi!谢谢你的回复,但是我已经发现了一些东西,并且刚刚发布了答案。另外,我不确定你的方法是否真的有效。你没有看到测试它。因为这种方法允许编译,但似乎不起作用,因为Obj-C库需要指向该对象的指针,而不是实际的CGImage(甚至是struct),所以本机代码将失败(如果没有崩溃)。不要提及CGImage*
绝对不等于CGImage
。此外,链接中的答案并不表示最终成功。看起来这家伙能够编译它,但是链接也没有一个可接受的答案,所以这种方法不起作用。@Agat是的,我没有做测试。您可以标记可以帮助更多具有相同问题的人的解决方案:)。