是否可以像这样调用 c(++) 静态函数指针(不是委托(delegate))
typedef int (*MyCppFunc)(void* SomeObject);
来自 c#?
void CallFromCSharp(MyCppFunc funcptr, IntPtr param)
{
funcptr(param);
}
我需要能够从 c# 回调到一些旧的 c++ 类。 C++ 是托管的,但这些类还不是 ref 类。
到目前为止,我不知道如何从 c# 调用 c++ 函数指针,这可能吗?
最佳答案
dtb 是对的。这是 Marshal.GetDelegateForFunctionPointer 的更详细示例。它应该适合你。
在 C++ 中:
static int __stdcall SomeFunction(void* someObject, void* someParam)
{
CSomeClass* o = (CSomeClass*)someObject;
return o->MemberFunction(someParam);
}
int main()
{
CSomeClass o;
void* p = 0;
CSharp::Function(System::IntPtr(SomeFunction), System::IntPtr(&o), System::IntPtr(p));
}
在 C# 中:
public class CSharp
{
delegate int CFuncDelegate(IntPtr Obj, IntPtr Arg);
public static void Function(IntPtr CFunc, IntPtr Obj, IntPtr Arg)
{
CFuncDelegate func = (CFuncDelegate)Marshal.GetDelegateForFunctionPointer(CFunc, typeof(CFuncDelegate));
int rc = func(Obj, Arg);
}
}
关于c# - 从 c# 调用 c++ 函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2470487/