【问题标题】:Can you use .net 3.5 Action or Func as Marshalled unmanaged delegates?您可以使用 .net 3.5 Action 或 Func 作为 Marshalled 非托管委托吗?
【发布时间】:2010-11-23 18:22:56
【问题描述】:

看完Dynamically calling unmanaged dlls in .net

我一直在尝试根据自己的喜好修改代码。我创建了一个类,它实现了 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 不能是泛型类型定义。有没有办法解决这个问题,还是我必须提供一个命名的委托来做任何非托管的事情?

任何对在非托管代码的窗口中默认可以做什么感兴趣的人的参考 - Link(创建快捷方式,动态加载 DLL)

【问题讨论】:

    标签: .net-3.5 delegates pinvoke marshalling anonymous-methods


    【解决方案1】:

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

    【讨论】:

    • 所以没有语法或解决方法?
    • @Maslow,不,现在没有
    • 我想既然没有其他答案,我会接受只是向我读出异常内容的答案,我会更喜欢一些资源、参考或某种解决方法的想法。
    • @Maslow,不幸的是,没有什么可以提供的了。目前这只是一个不受支持的场景
    猜你喜欢
    • 2011-05-27
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    相关资源
    最近更新 更多