我正在尝试使用VTK和C#来读取和写入VTK/VTS文件。我创建了一个基本的应用程序,并安装了名为ActiViz.NET.x64 (v5.8.0)的64位VTK .NET包装包。
安装的包没有任何问题,我可以访问Kitware.VTK命名空间,但是一旦我尝试创建一个VTK对象,我就得到了一个非托管DLL加载错误。
System.DllNotFoundException类型的未处理异常发生在Kitware.VTK.dll中 其他信息:无法加载DLL 'Kitware.VTK.vtkFiltering.Unmanaged.dll':找不到指定的模块。(HRESULT例外: 0x8007007E)
我不认为确切的代码在这里是相关的,但我在下面一行中得到了异常:
vtkStructuredGrid structuredGrid = vtkStructuredGrid.New();
我使用的是Windows10 x64,Visual 2015,目标.NET框架为4.6.2,安装了ParaView 4.1和5.2。所讨论的DLL位于应用程序的bin目录中,但我也尝试将其复制到Windows/System32 32目录中,结果是相同的。
是否有一种方法可以找出dll加载的问题所在?
发布于 2019-08-29 02:36:21
如果您进入ActiViz产品页面,您可以在常见问题中看到以下内容:
ActiViz 64与Visual?一起工作吗? Visual是一个32位应用程序,因此64位控件无法工作,在Visual中使用设计器时需要32位版本的ActiViz。通常,32位版本用于设计,64位版本用于最终编译。
我还在Visual上使用VTK/ActiViz (C#),当我的程序以x86平台为目标时,它工作得很好。但是,如果我以x64平台为目标,呈现窗口的winforms控件就会消失,但我仍然可以构建可执行文件。所以要这样做:
1)在Activiz.NET.x86平台上安装NuGet和目标x86平台;
2)创建和调试应用程序;
3)备份解决方案文件夹;
4)从Activiz.NET.x64和目标x64平台安装NuGet;
5)不要打开设计器,因为它会有问题(所有RenderWindowsControl都消失了);
6)构建解决方案(发布x64)。
发布于 2016-12-28 16:01:34
所以,首先,我想知道我的进程到底在哪里寻找缺少的DLL。我使用了Sysinternals套房和它的过程监视器。

我在我的.NET库中引用了VTK,这是我在自己托管的应用程序中使用的。自托管的应用程序是启动项目,所以运行时在应用程序的目录中查找缺少的DLL,而不是库中的DLL。
在我将丢失的Kitware.VTK.vtkFiltering.Unmanaged.dll复制到该目录后,Process确认DLL已被成功读取,但我仍然得到了与以前相同的异常。
我比较了库和应用程序的bin目录,我认为只有Kitware.mummy.Runtime.dll和Kitware.VTK.dll是自动复制的。我将所有其他VTK all复制到应用程序的bin中,然后它终于起作用了。
异常的错误消息一开始并不详细,但我认为这更可能是ActiViz.NET包的一个问题。
发布于 2017-01-20 12:07:31
即使您不需要在代码中使用,也应该从Activiz安装bin目录复制所有all。C:\程序文件(x86)\ActiViz.NET 5.8.0 OpenSource Edition\bin
托管.Net DLL是非托管VTK库的包装器。Mummy.dll就是这份工作的对象。
https://stackoverflow.com/questions/41363852
复制相似问题