【问题标题】:Load Unmanaged DLL in Designer to load Wrapped Controls在 Designer 中加载非托管 DLL 以加载包装控件
【发布时间】:2012-08-16 03:02:17
【问题描述】:

有没有办法在 Visual Studio 的设计时加载非托管 dll?

我知道我总是可以将DLL放在“System32”文件夹中或将DLL路径添加到“PATH”变量中以直接加载它。但我不想那样做。我想从应用程序的 ExecutablePath 加载它。 DLL 实际上包含一个控件。

谁能帮我解决这种情况??


谢谢, 写字

【问题讨论】:

  • 您可能必须从可执行路径中 PInvoke 它,然后自己构建设计器。 VS 设计器只需创建一个 .designer.cs 文件,您也可以手动编写该文件。
  • 我要使用VS的设计器!这就是为什么我要问是否有其他方法可以做到这一点!或者我会使用“空白应用程序”模板而不是“Windows 窗体项目”!如果我尝试编辑 *.designer.cs 文件,那么我认为 vs 会覆盖它,因为我以前遇到过这样的问题!
  • 我并不是说要覆盖 *.designer.cs 文件,而是设计器文件只是创建了一个部分类文件,您可以将其放入另一个文件中。非托管代码是在运行时调用的,这就是设计人员无法看到/使用它的原因,因为它无法在 VS 设计器中生成。这与无需重新编译应用程序即可换出 DLL 的原因相同。
  • 是的,我知道设计器文件包含表单的部分类。是的,“在运行时调用非托管代码”,但是当我在设计器中添加一个控件 [由 dll [包含由另一个 .net dll 包装]] 时,它只是不起作用并显示错误消息框!所以,我问是否有办法从应用程序路径中预加载设计器中的 dll! [我不会为这个小作品自己手动重写设计器!]

标签: c# dll unmanaged windows-forms-designer


【解决方案1】:

我想从应用程序的 ExecutablePath 加载它

那行不通,还没有。除了 Windows 从不查看之外,当您从源代码管理签入或清理项目时,设计器肯定会失败。

此代码在 Visual Studio 的上下文中运行,因此 Windows DLL 搜索规则基于其安装位置。目前尚不清楚这是失败的 pinvoke 代码,还是您的程序集对 DLL 有隐式依赖。你可以做一些关于 pinvoke 的事情,你可以通过测试 DesignMode 属性来阻止代码运行。处理隐式依赖的唯一方法是帮助 Windows 找到 DLL。搜索路径上的目录。唯一的出路就是将代码拆分成只在设计模式下真正重要的部分,以便 DesignMode 再次变得有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2011-02-23
    相关资源
    最近更新 更多