小编Ami*_*oaf的帖子

将一个函数指针"转换"为objective-C中的一个块

我正在做一些从Mono C#到Obj-C的Interop并遇到了这个问题.C#代码需要传递回调 - 它与函数指针一起执行.我可以从Obj-C端获取函数指针并调用它,一切正常.但我现在需要将该函数指针作为对第三方API的回调,该第三方API将块作为回调.我希望第三方调用C#函数 - 所以在某种程度上我试图将函数指针转换为块,以便第三方可以运行它,或者创建某种桥 - 创建我自己的块运行该函数指针并将其提供给第三方.我似乎无法找到一种方法 - 如何生成一个块,其中包含运行哪个函数的信息,然后将其提供给第三方.也许还有另一种选择吗?

编辑:将函数放在一个全局变量可能会有效,但我希望能够拥有大量的函数,因为第三方API是异步的,我不希望它调用错误的回调.

我试过的代码:

typedef void (*DummyAction)(char * result);
typedef void (^DummyBlock)(char * result);

@interface FunctionToBlock : NSObject
{
    DummyAction function;
    DummyBlock block;
}

- (id) initWithFunction: (DummyAction) func;
- (DummyBlock) block;
@end

@implementation FunctionToBlock : NSObject
- (id) initWithFunction: (DummyAction) func {
    if (self = [super init]) {
        function = func;
        block = ^(char * result) {
            function(result);
        };
    }
    return self;
}

- (DummyBlock) block {
    return block;
}
@end …
Run Code Online (Sandbox Code Playgroud)

function-pointers block objective-c objective-c-blocks

10
推荐指数
2
解决办法
3304
查看次数

如何在C#中获取有关委托函数实例(如名称或包含类)的信息?

我有一个委托功能

class FuncActivator {
  public delegate void DelFunc(string arg, string val);
}
Run Code Online (Sandbox Code Playgroud)

我保持该函数的实例在程序中稍后同时启动(同样在FuncActivator:

List<DelFunc> funcList = new List<DelFunc>();

public void KeepFunc(DelFunc delFunc) {
  funcList.Add(delFunc);
}
Run Code Online (Sandbox Code Playgroud)

现在我想获得有关实际委托名称的信息,或者至少在哪里传递它的类.例如,在不同的类中

public class FunnyClass {
  public void FunnyFunc(string arg, string val) {
    //..Do stuff
  }

  public FunnyClass () {
    FuncActivatorInstance.KeepFunc(FunnyFunc);
  }
}
Run Code Online (Sandbox Code Playgroud)

我想从一个方法中FuncActivator列出我列表中所有代表的名字或调用者(如"FunnyFunc"或至少"FunnyClass").那可能吗?

c# delegates

3
推荐指数
1
解决办法
594
查看次数