我目前正在为EDQueue library.
创建ios绑定 Structs.cs
文件看起来像这样:
using System;
using ObjCRuntime;
namespace EDQueue
{
// => Enums attributed with[NativeAttribute] must have an underlying type of `long` or `ulong`
[Native]
public enum EDQueueResult : long
{
Success = 0,
Fail,
Critical
}
}
ApiDefinition.cs
文件类似于:
using System;
using Foundation;
using ObjCRuntime;
namespace EDQueue
{
// typedef void (^EDQueueCompletionBlock)(EDQueueResult);
delegate void EDQueueCompletionBlock(EDQueueResult result);
// ETC....
// @protocol EDQueueDelegate <NSObject>
[Protocol, Model]
[BaseType(typeof(NSObject))]
interface EDQueueDelegate
{
// @optional -(EDQueueResult)queue:(EDQueue *)queue processJob:(NSDictionary *)job;
[Export("queue:processJob:")]
EDQueueResult Queue(EDQueue queue, NSDictionary job);
//// @optional -(void)queue:(EDQueue *)queue processJob:(NSDictionary *)job completion:(EDQueueCompletionBlock)block;
//[Export("queue:processJob:completion:")]
//void Queue(EDQueue queue, NSDictionary job, EDQueueCompletionBlock completeBlock);
}
// ETC...
}
如上所述,产生以下错误:
错误CS0426:文件EDQueueDelegate.g.cs
抛出错误时,该文件如下所示:
//
// Auto-generated from generator.cs, do not edit
//
// We keep references to objects, so warning 414 is expected
#pragma warning disable 414
using System;
using System.Drawing;
using System.Diagnostics;
using System.ComponentModel;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;
using UIKit;
using GLKit;
using Metal;
using MapKit;
using ModelIO;
using SceneKit;
using Security;
using AudioUnit;
using CoreVideo;
using CoreMedia;
using QuickLook;
using Foundation;
using CoreMotion;
using ObjCRuntime;
using AddressBook;
using CoreGraphics;
using CoreLocation;
using AVFoundation;
using NewsstandKit;
using CoreAnimation;
using CoreFoundation;
namespace EDQueue {
[Protocol (Name = "EDQueueDelegate", WrapperType = typeof (EDQueueDelegateWrapper))]
[ProtocolMember (IsRequired = false, IsProperty = false, IsStatic = false, Name = "Queue", Selector = "queue:processJob:", ReturnType = typeof (EDQueue.EDQueueResult), ParameterType = new Type [] { typeof (global::EDQueue.EDQueue), typeof (NSDictionary) }, ParameterByRef = new bool [] { false, false })]
public interface IEDQueueDelegate : INativeObject, IDisposable
{
}
// ETC...
}
但是,如果我删除或注释掉[Protocol, Model]
位,则构建库时没有错误。
如果我使用EDQueueCompletionBlock
取消注释第二个函数,我也会收到类似的错误,这最终依赖于EDQueueResult
枚举。
Structs.cs
文件的构建操作设置为ObjcBindingCoreSource
。
真的很感激任何帮助。谢谢!
答案 0 :(得分:1)
由于您同时拥有名为EDQueue
的名称空间EDQueue
和类型(接口) - 您无法使用EDQueue
引用名称空间EDQueue.TypeName
中的任何类型,因此此语句:
ReturnType = typeof (EDQueue.EDQueueResult)
不会编译,因为编译器会在EDQueue
接口内搜索成员(即使接口不能有子类,也不能有静态成员),而不能在EDQueue
命名空间内。
最明显的解决方法是不要使用具有相同名称的命名空间和类型,因此重命名命名空间或类型名称。
如果无法做到或者您不完全确定它不会产生副作用 - 请更改对
的引用ReturnType = typeof (EDQueueResult)
并将using EDQueue
添加到usings块。或者,参考如下:
ReturnType = typeof (global::EDQueue.EDQueueResult)