2009-08-28 61 views
2

看完后Dynamically calling unmanaged dlls in .net你可以使用.net 3.5 Action或Func作为Marshalled非托管代理吗?

我一直在尝试修改代码以符合我的喜好。我做了一个实现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); 

最后一行抛出一个参数异常,说明指定的类型不能是泛型类型定义。有没有办法解决这个问题,还是必须提供一个命名委托来执行任何不受管理的操作?

对于您可以通过默认与非托管代码窗口做任何有兴趣的参考 - Link(创建快捷方式,动态地加载DLL)

回答

1

由于异常指示,必须使用时,非泛型委托将本地函数指针转换为托管代码。

+0

所以没有语法或方法吗? – Maslow 2009-08-28 17:15:32

+0

@Maslow,目前还没有 – JaredPar 2009-08-31 20:53:16

+0

我想因为没有其他的答案,我会接受答案,只是回读我的例外说什么,我会偏爱一些资源,参考或某种类型的解决方法的想法。 – Maslow 2009-09-07 23:38:21

相关问题