Sam*_*Sam 18 c# c++ function-pointers
是否可以像这样调用ac(++)静态函数指针(不是委托)
typedef int (*MyCppFunc)(void* SomeObject);
Run Code Online (Sandbox Code Playgroud)
来自c#?
void CallFromCSharp(MyCppFunc funcptr, IntPtr param)
{
funcptr(param);
}
Run Code Online (Sandbox Code Playgroud)
我需要能够从c#回调到一些旧的c ++类.C++是托管的,但类不是ref类(还).
到目前为止,我不知道如何从c#调用c ++函数指针,是否可能?
Lar*_*ars 17
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));
}
Run Code Online (Sandbox Code Playgroud)
在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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15524 次 |
| 最近记录: |