我试图弄清楚我的DLL无法在某些计算机上加载的原因。
我的申请:
使用setup.msi安装程序部署的C#程序。安装程序内部是放置在应用程序的安装目录中的DLL。例如:
OUTDIR = c:\Program Files\MyApplicationName\%OUTDIR%\MyApplication.exe
dir %OUTDIR%\DLL_FOLDER\\*.dll
MYDLL.DLL
C#应用程序调用由以下指定的LoadLibrary:
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr LoadLibrary(string libname);
所以基本上
intPtr dll_handle = LoadLibrary("myDll.dll");
被调用,我们使用dll_handle来调用所需的函数。
到目前为止,这已经在我已经部署过的5/7台机器上工作了......我在这里犯下的明显错误是什么? : - )
感谢任何帮助!
答案 0 :(得分:7)
最可能的解释是:
要采取的第一个诊断步骤是检查LoadLibrary
的返回值,如果是NULL
,则调用GetLastError
以检索错误代码。在p / invoke中你这样做:
IntPtr lib = LoadLibrary(...);
if (lib == IntPtr.Zero)
throw new Win32Exception();
您可以使用Dependency Walker之类的工具进一步调试问题。