C#学习教程:从c#调用c ++函数指针分享


从c#调用c ++函数指针

是否可以像这样调用ac(++)静态函数指针(不是委托)

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); } } 

看看Marshal.GetDelegateForFunctionPointer方法。

 delegate void MyCppFunc(IntPtr someObject); MyCppFunc csharpfuncptr = (MyCppFunc)Marshal.GetDelegateForFunctionPointer(funcptr, typeof(MyCppFunc)); csharpfuncptr(param); 

但是,我不知道这是否真的适用于您的C ++方法,因为MSDN文档指出:

您不能将此方法与通过C ++获得的函数指针一起使用

上述就是C#学习教程:从c#调用c ++函数指针分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031594.html

发表评论

邮箱地址不会被公开。 必填项已用*标注