C#2010没有加载delphi DLL
本文关键字:delphi DLL 加载 C#2010 | 更新日期: 2023-09-27 18:19:55
我面临一个问题。我已经在Delphi2009中编写了win32 DLL。现在我想从C#桌面应用程序动态加载DLL,但LoadLibray函数返回0。这是CSharp的代码,请任何人帮我为什么DLL没有加载?
public partial class Form1 : Form
{
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string dllToLoad, IntPtr hFile, uint dwFlag);
[DllImport("kernel32.dll")]
public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
[DllImport("Kernel32.dll")]
private extern static Boolean CloseHandle(IntPtr handle);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
IntPtr ptr = IntPtr.Zero;
ptr = LoadLibrary("MyDLL.dll", IntPtr.Zero, 0);
if (ptr == IntPtr.Zero)
{
MessageBox.Show("DLL not laded");
}
}
}
}
LoadLibrary
的签名错误。应该是:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr LoadLibrary(string dllname);
您有两个伪参数,并且没有捕获错误代码。
调用Win32函数时始终检查错误。在这种情况下,
IntPtr lib = LoadLibrary(dllname);
if (lib == IntPtr.Zero)
throw new Win32Exception();
常见的故障模式包括:
- 不匹配的bitness
- 在DLL搜索路径上找不到DLL
- DLL的依赖项未解析
我不能告诉你为什么没有加载DLL,因为问题中没有足够的信息。
提示:您是否检查过应用程序是否以适合DLL的32位或64位运行?
但是,我可以告诉你如何获得有关该问题的更多信息。
首先,在属性中添加以下内容:
[DllImport("Kernel32.dll", SetLastError=true)]
^-----------------^
然后将其添加到处理问题的if语句中:
if (ptr == IntPtr.Zero)
throw new Win32Exception();
这应该会给您一个更具体的异常消息,指示问题可能是什么。