DllNotFoundException, but DLL is there
Asked Answered
Z

5

37

So I'm using an SDK for a hardware random number generator which provides a dll called PsyREG.dll for interacting with it, as well as some c# source for using the methods from the dll.

It has worked in the past, but somehow it has stopped working. My hands are a bit tied as I don't actually have access to the device in question at the moment, so I can't try a lot of things...

However, here's the weird thing. The dll is there, the same place it's always been. Ahd in fact File.Exists("PsyREG.dll") returns true, and I've double checked and that's the exact same way the provided c# source imports it, e.g. [DllImport("PsyREG.dll")].

Any ideas?

Zarf answered 7/8, 2009 at 19:10 Comment(1)
I had a similar issue with Google OrTools. I found a fix here: https://mcmap.net/q/121650/-or-tools-sat-example-not-working-within-c-forms-appDallman
M
48

Probably this DLL has some dependencies that aren't registered or aren't in the same folder as your application.

Monney answered 7/8, 2009 at 19:15 Comment(4)
Thanks, that was it. There were some other things that were needed, but for a few reasons I didn't think to check that (including the fact that it said it couldn't load PsyREG.dll, not a different file)Zarf
Times like this are when I break out Reflector. It can show you the dependencies. In particular, it can show you which ones aren't found.Stylography
Really? Does Reflector find unmanaged dependencies? Where is that option?Storekeeper
I use DependancyWalker and, if that fails (i.e., if the DLL is being loaded dynamically), FileMon to simply watch where searches fail.Enchant
R
9

Open DLL on the problematic system in http://www.dependencywalker.com/

Rigveda answered 4/3, 2015 at 22:31 Comment(3)
This app did the job for me.Ichthyosis
cool...that tool helped me resolve a lot of install problems when deploying.Rigveda
No idea... Maybe this #6977798Rigveda
C
2

I ran into this problem and solved with the following:

There's a dependency on msvcr90.dll if you compile under /MD. Try compiling the code with /MT instead.

Project properties > C/C++ > Code Generation > Runtime Library: /MT

Chita answered 20/3, 2017 at 15:1 Comment(0)
E
1

Perhaps you should check to see if you're expecting a specific product version of the dll, and make sure that the product versions still match up correctly.

Einsteinium answered 7/8, 2009 at 19:16 Comment(0)
W
0

I was dealing with the same exception with regards to one of my DLL's (let's call it A). C# was crashing because it claimed it couldn't find this DLL (A) (while it was there in the same folder as the executable).

Turned out that the issue was caused by A having dependency on another DLL (call it B). B was not in the path so A couldn't load it when it needed it. Since B needed a whole bunch of other DLL's, the solution was to add B's directory to the PATH environment variable.

It's interesting how C# crashes with the error saying that A is not found when in fact B was not found...

Wertz answered 16/2, 2016 at 0:59 Comment(3)
Can you explain the the solution was to add B's directory to the path environment variable part a little? I'm currently struggeling with almost the same problem, only difference is that my Dll wants some *.so files instead of other Dll's.Fagaceous
@Fagaceous I believe in Linux terminal you would do export PATH=$PATH:YOUR-SO-FILE-PATH to add the directory YOUR-SO-FILE-PATH to your PATH environment variable. This way, when your so file needs to be loaded, the path specified by PATH will be searched to find that so file.Wertz
Thanks, I've tried it that way but it didn't really work. I read somewhere else to move my dll into the /usr/lib directory (yes, it's indeed a linux system) and that worked without any further configurationFagaceous

© 2022 - 2024 — McMap. All rights reserved.