2

在阅读 .net 中动态调用非托管 dll 之后

我一直在尝试根据自己的喜好修改代码。我创建了一个类,它实现了 idisposable 来包装加载调用并在需要时释放它们。但是,如果可以使用匿名委托,我似乎无法弄清楚语法。

var loaded=DynamicLibraryLoader.TryLoad("User32.dll");
var beeper=loaded.GetProcAddress("MessageBeep");
var type=typeof(Action<UInt32>);
Action<UInt32> beepAction2=(Action<UInt32>) Marshal.GetDelegateForFunctionPointer(beeper,type);

最后一行抛出一个参数异常,指出指定的 Type 不能是泛型类型定义。有没有办法解决这个问题,还是我必须提供一个命名的委托来做任何非托管的事情?

任何对默认情况下使用非托管代码在 Windows 中可以执行的操作感兴趣的人的参考 -链接 (创建快捷方式,动态加载 DLL)

4

1 回答 1

1

如异常所示,在将本机函数指针转换为托管代码时,您必须使用非泛型委托。

于 2009-08-28T16:57:16.543 回答