【发布时间】:2014-05-13 14:47:14
【问题描述】:
在我的应用程序中,我必须动态加载 dll。我已经使用 DllImport 属性动态加载了 dll。但我遇到了以下异常。
System.EntryPointNotFoundException
附加信息:在 DLL zkemkeeper.dll' 中找不到名为“Connect_Net”的入口点。
此异常的可能原因是什么。我该如何处理。请帮帮我。
这是我的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("C:\\Windows\\SysWOW64\\zkemkeeper.dll", EntryPoint = "Connect_Net")]
public static extern bool Connect_Net(string IPAdd, int Port);
[DllImport("C:\\Windows\\SysWOW64\\zkemkeeper.dll", EntryPoint = "Disconnect")]
public static extern void Disconnect();
private void button1_Click(object sender, EventArgs e)
{
var res = Connect_Net("192.168.1.201", Convert.ToInt32(4370));
Disconnect();
}
}
【问题讨论】:
-
请提供代码。但是你的入口点肯定是错误的,所以“windows dll-entry-standard”根本找不到它。
-
我已经添加了代码。
-
在该 DLL 上运行 dumpbin.exe /exports,以便您知道入口点函数名称是什么。您可能只会看到 4 个函数,例如 DllGetClassObject()。这意味着您应该添加对 DLL 的引用,以便可以直接使用 COM 组件。
-
在我的 DLL 上运行 dumpbin.exe /exports 后,只列出了 5 个函数。我看不到我需要的功能。我必须动态加载dll,所以有什么方法可以动态访问所需的函数。
-
@HansPassant 如果在 DLL 上运行 dumpbin.exe /exports 后未列出某个函数,有没有办法在不引用该 dll 的情况下访问该函数。
标签: c# .net dll pinvoke dllimport