gpt4 book ai didi

C# 到 C++/CLI 到 C DLL System.IO.FileNotFoundException

转载 作者:太空狗 更新时间:2023-10-29 19:53:33 26 4
gpt4 key购买 nike

当运行调用 C++/CLI 程序集的 C# 代码时,我得到 System.IO.FileNotFoundException: The specified module could not be found纯 C DLL。一旦实例化调用纯 C DLL 函数的对象,它就会发生。

BackingStore 是纯 C 语言。CPPDemoViewModel 是调用 BackingStore 的 C++/CLI,它具有对 BackingStore 的引用。

我尝试了最简单的情况 - 添加一个新的 C# 单元测试项目,该项目只是尝试创建一个在 CPPDemoViewModel 中定义的对象。我从 C# 项目添加了对 CPPDemoViewModel 的引用。

C++/CLI 测试项目只需添加对 CPPDemoViewModel 的引用即可正常工作,因此它是关于在语言之间切换的。

我正在使用 Visual Studio 2008 SP1 和 .Net 3.5 SP1。我在 Vista x64 上构建,但一直小心确保我的平台目标设置为 x86。

这感觉像是愚蠢而明显的我想念的东西,但如果我浪费时间试图私下解决它就更愚蠢了,所以我在这里让自己难堪!

这是对移植大量遗留 C 代码的项目的测试,我将这些代码保存在一个 DLL 中,并使用 C++/CLI 实现的 ViewModel。

编辑检查目录后,我可以确认BackingStore.dll没有被复制。

我有使用典型的多项目解决方案创建的标准唯一项目文件夹。

WPFViewModelInCPP  BackingStore  CPPViewModel  CPPViewModelTestInCS    bin      Debug  Debug

令我惊讶的是,更高级别的 Debug 似乎是 C 和 C++/CLI 项目使用的公共(public)文件夹。

WPFViewModelInCPP\Debug 包含 BackingStore.dll、CPPDemoViewModel.dll、CPPViewModelTest.dll 及其关联的 .ilk 和 .pdb 文件

WPFViewModelInCPP\CPPViewModelTestInCS\bin\Debug 包含 CPPDemoViewModel 和 CPPViewModelTestInCS .dll 和 .pdb 文件,但 BackingStore。但是,手动将 BackingStore 复制到该目录并未修复错误。

CPPDemoViewModel 具有属性 Copy Local 集,我假设它负责在引用 if 时复制其 DLL。我无法将 C# 项目的引用添加到纯 C DLL - 它只是说无法添加对后备存储的引用。

我不确定我是否只有一个或两个问题。

我可以使用老式的复制构建步骤将 BackingStore.dll 复制到任何给定的 C# 项目目录中,尽管我希望新的 .net 模型不需要这样做。

DependencyWalker 告诉我丢失的文件是 GPSVC.dll has been suggested表示安全设置问题。我怀疑这是一条红鲱鱼。

编辑2通过将 BackingStore.dll 的手动副本与可执行文件相邻,GUI 现在可以正常工作。 C# 测试项目仍然存在问题,我怀疑这是由于测试项目的运行时环境造成的,但我现在可以不用它了。

最佳答案

C 和 C++ DLL 是否与正在执行的 C# 程序集位于同一目录中?

您可能必须更改项目输出设置,以便 C# 程序集和其他 DLL 最终都位于同一文件夹中。

我经常使用 Dependency Walker在这种情况下;这是一个健全性检查,表明实际上可以找到所有依赖项。

应用运行后,您可能还想尝试 Process Monitor在您正在运行的代码上,查看正在引用哪些 DLL,以及它们所在的位置。

关于C# 到 C++/CLI 到 C DLL System.IO.FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/647310/

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