gpt4 book ai didi

c# - 从 Visual Studio 2008 中的 C# 应用程序调用时如何调试 C DLL

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:05 26 4
gpt4 key购买 nike

我有一个 C# 窗口应用程序需要使用仅在 C 中提供的第三方 API。为了解决这个问题,我在 VS2008 中创建了三个项目:两个 C# 项目和一个空的 C++ 项目.一个 C# 项目是我的“Wrapper”项目,它只负责生成调用 C DLL 的托管代码。另一个 C# 项目是窗口应用程序,它使用 Wrapper 项目;我们称其为 GUI 项目。

在 C++ 项目中,我创建了几个使用第三方 API 和导出 (dllexport) 合适函数的 C 文件 (*.c)。我可以成功地将这个项目编译成一个 DLL,并且在从我的 Wrapper 项目中调用这些函数时没有任何问题。如果相关,我的 Wrapper 项目使用 DllImport 属性来引用这些函数。

我的 C++ 项目有一个构建后事件,它将生成的 DLL 复制到我的 GUI C# 项目的输出目录中,以便在执行时获取它。这感觉有点严峻,但这是我想出如何做到这一点的唯一方法。我的 GUI 项目依赖于我的 Wrapper 项目,而 Wrapper 项目又依赖于 C++ 项目。

然而,我正在努力做的是调试(即逐步执行)我的 C 项目代码。我试图在 C 代码中设置一个断点,希望它能在我的 C# 代码执行相关函数时被捕获。不幸的是,我一运行我的 C# 应用程序,IDE 就警告我永远不会执行 C 断点:“没有为该文档加载任何符号。”

如有任何帮助,我们将不胜感激。以下是我玩过的一些东西,但无济于事:

  • 确保 .pdb 文件与 DLL 文件具有相同的时间戳。在 Google 随机建议“无符号”错误可能由此引起之后,便遵循了此提示。

  • 我在我的两个 C# 项目属性中都选择了“启用非托管代码调试”。

  • 我已经尝试在调用其中一个 DLL 方法之前在我的 C# 调用中设置一个断点,并尝试进入 DLL。这也不起作用,它只是跳过了函数。

最佳答案

您应该检查模块列表(通常在 Visual Studio 的“调试”菜单中找到)以确保:

  • 模块已加载
  • 它正在从正确的地方加载
  • 已正确加载符号

如果窗口列出了模块,但指示未加载符号,则可以通过右键单击模块并选择“加载符号”来强制 VS 加载符号。如果它无法自动找到它们,则会提示您输入路径。

关于c# - 从 Visual Studio 2008 中的 C# 应用程序调用时如何调试 C DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3921631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com