【问题标题】:How can i see the Dll Classes Without object browser in visual studio?如何在 Visual Studio 中查看没有对象浏览器的 Dll 类?
【发布时间】:2014-01-29 02:49:06
【问题描述】:

我有一个无效程序集,所以我无法在 Visual Studio 参考中导入。然后我找到了解决方案,比如 C# 中的 [DllImport("ScanDll.dll")] 。我已经做到了。

现在我想查看 dll 类。

如何在 Visual Studio 中查看没有对象浏览器的 Dll 类?

【问题讨论】:

  • 如果您使用DllImport,它必须是本机 dll,而不是托管的。查看其中内容的唯一方法是查看属于它的头文件。
  • 是否有可能在对象浏览器中看到这个 dll?

标签: c# visual-studio-2010 visual-studio-2012 dll


【解决方案1】:

我对你的问题的进一步评论,

如果您使用 DllImport,它必须是本机 dll,而不是托管的。唯一的 查看其中内容的方法是查看属于的头文件 有了它

如果您确实拥有本机 DLL 的源代码,您可能想尝试使用 PInvoke Interop Assistant 生成与 DLL 交互所需的 C#。请注意,这是不完美的,尽管如此 YMMV。

如果您有源代码,您只能“浏览”DLL 类。如果只有 DLL,就没有办法做到这一点。

按照@Anders Abel 的建议,通过使用Dependency Walker,您可以获得一些关于导出的类和函数的信息。然而,使用它来生成 C# 包装器的主要问题是,您看不到任何信息来区分作为指针传递的参数或通过引用传递的参数,即使指针可能暗示数组。例如,在 C# 中,您需要知道这一点,以便应用正确的 refout 限定符。

【讨论】:

  • @Sagotharan 那你就不走运了。没有可靠的方法可以从 dll 甚至从关联的库中获取此信息。甚至依赖遍历器也不会向您显示类定义,只会显示损坏的函数名称。
【解决方案2】:

如果它是非托管 DLL,获取可用方法信息的常规方法是通过 DLL 提供的头文件。

如果您没有任何头文件,则使用Dependency Walker (depends.exe) 来查看DLL 导出了哪些函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 2012-05-02
    相关资源
    最近更新 更多