在winapi函数中,我必须传递该函数必须使用的回调函数的地址。
所以我声明了一个不安全的类和所有的东西,但是bool* addressofmyfunction = &GetHandle;就是不编译!
请帮助我,或者给我一种替代方法,让我像这样传递地址。
发布于 2009-11-10 04:21:55
在.NET中,delegates用于存储指向函数的指针。例如,如果您有以下函数:
public int GetHandle(int arg1)
{
return arg1 + 10;
}它的地址定义如下:
Func<int, int> addressOfMyFunction = GetHandle;你可以这样调用它:
int result = addressOfMyFunction(50);发布于 2009-11-10 04:22:08
bool* addressofmyfunction = &GetHandle也不能用C或C++编译(正确的语法应该是bool (*addressofmyfunction)() = &GetHandle),但你不能这样做。我不是互操作方面的专家,但我认为你必须使用Marshal.GetFunctionPointerForDelegate。
发布于 2009-11-10 04:24:28
函数指针在C#中由委托表示。因为方法不会被垃圾收集器移动,所以您不需要固定它们(或使用不安全的代码)来将它们传递给Win32函数。
示例:
using System;
using System.Runtime.InteropServices;
public delegate bool CallBack(int hwnd, int lParam);
public class EnumReportApp {
[DllImport("user32")]
public static extern int EnumWindows(CallBack x, int y);
public static void Main()
{
CallBack myCallBack = new CallBack(EnumReportApp.Report);
EnumWindows(myCallBack, 0);
}
public static bool Report(int hwnd, int lParam) {
Console.Write("Window handle is ");
Console.WriteLine(hwnd);
return true;
}
}EnumThreadWindows on pinvoke.net也有类似的例子。
https://stackoverflow.com/questions/1703479
复制相似问题