如何从Rust函数中检查它是直接调用还是由C#代码的Invoke()调用?

时间:2018-09-09 16:03:18

标签: reflection rust ffi

我正在这样从C#的本机DLL中调用Rust函数:

[DLLImport("rust.dll")]
public static int Foo(int i);
public static void Invoke() {
    typeof(Program).GetMethod("Foo").Invoke(new object[] {null}, new object[] {1});
}
public static void Call() {
    Foo(1);
}

我想检查方法是直接调用还是使用Invoke调用。如果调用该方法,则应打印"Invoked",否则应打印"Called"。我不确定是否可以区分这两件事。

1 个答案:

答案 0 :(得分:2)

没有,这是不可能的,如果没有做一些非常奇怪的事情,那肯定是不便携的,不会过时的,或者以任何方式都不可靠。

在Rust内部,函数调用是函数调用,无论使用哪个外部API进行调用。