gpt4 book ai didi

c# - 是什么导致在单元测试(NUnit 或 MSTest)中从 C# 调用的 C++ 函数产生与在控制台应用程序中运行的相同代码不同的结果?

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:12 24 4
gpt4 key购买 nike

我正在使用 DllImport 通过 P/Invoke 从 C# 调用 C++ DLL。 DLL 由第三方生成并且仅为 x86(因此我们的 C# 代码也构建为 x86)。

如果我从控制台应用程序调用 DLL 上的某个函数,我总是会得到一个正确的结果。该函数采用文件路径并从文件中提取一些信息。

函数的签名是:

private static extern int Function(
string str1,
int bool1,
ref uint outUint1,
ref uint outUint2,
ref uint outUint3,
ref double outDouble1,
ref double outDouble2,
StringBuilder outStr1);

意外的结果出现在 ref uint 参数之一中。

如果我创建一个单元测试并调用完全相同的代码(所有参数都经过硬编码),我会得到完全不同的结果,这是不正确的。错误的结果总是一样的。我已经使用各种不同的运行程序尝试了 MSTest 和 NUnit 测试,结果相同。

产生正确结果的案例:

  • 控制台应用
  • Winforms 应用
  • 运行代码但从单元测试 (NUnit) 启动的控制台应用

产生错误结果的案例:

  • 从 Resharper Test Runner (NUnit) 运行测试
  • 从 Visual Studio Test Runner (MSTest) 运行测试
  • 从 NUnit GUI Test Runner 运行测试
  • 从 NUnit 控制台测试运行程序运行测试

我的测试环境是 Windows 8,C# 是为面向 .NET Framework 4 的 x86 构建的。

对于导致此问题的原因或我可以做些什么来进一步调试它,你们有任何想法吗?

我肯定会尝试联系创建 DLL 的第三方,但如果能清楚地了解导致此问题的确切原因,将大大增加问题得到解决的机会。

最佳答案

听起来它期望的“文件路径”可能是相对于工作目录的,或者工作目录甚至应用程序目录对dll很重要。

该 dll 也可能会尝试引用其目录中的其他 dll,但无法找到它们,因为它是从其自己的文件夹而不是其目录中运行的 exe 加载的。

大约下降了一半this page它描述了 dll 解析的搜索顺序:

  1. The directory from which the application loaded.

  2. The current directory.

  3. The system directory. Use the GetSystemDirectory function to get the path of this directory.

  4. The 16-bit system directory. There is no function that obtains the path of this directory, but it is searched.

  5. The Windows directory. Use the GetWindowsDirectory function to get the path of this directory.

  6. The directories that are listed in the PATH environment variable. Note that this does not include the per-application path specified by the App Paths registry key. The App Paths key is not used when computing the DLL search path.

希望对您有所帮助。

编辑:另一个想法......您可以为该 DLL 编写一个包装器,以便它返回正确的值,并在您的包装器中创建一个与您的单元测试器一起工作的接口(interface)。

关于c# - 是什么导致在单元测试(NUnit 或 MSTest)中从 C# 调用的 C++ 函数产生与在控制台应用程序中运行的相同代码不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13314624/

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