gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 22:03:41 26 4
gpt4 key购买 nike

是否可以像这样调用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com