为了模拟来自 C++ 的调用,我正在尝试以下代码
private delegate void CppFuncDelegate(string message);
private static void Main(string[] args)
{
Console.WriteLine("+++ BEGIN TEST +++");
Action<string> action = str => Console.WriteLine("Received:" + str);
IntPtr delegatePtr = action.Method.MethodHandle.GetFunctionPointer();
CppFuncDelegate cppFuncDelegate = (CppFuncDelegate)
Marshal.GetDelegateForFunctionPointer(delegatePtr,
typeof(CppFuncDelegate));
cppFuncDelegate.Invoke("Hello");
}
但我明白了
检测到 PInvokeStackImbalance。调用 PInvoke 函数 'Test!Test.Program+CppFuncDelegate::Invoke' 使堆栈失衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。
谁能告诉我我做错了什么?
注意:请不要告诉我做 action.Invoke(); 这不是这个练习的目的。我想获得委托的 IntPtr 句柄并使用 GetDelegateForFunctionPointer() 然后调用返回的委托。
谢谢。