供应商的 DLL 已说明。需要“实例化”DllImport'ed 方法

我在我的软件中使用供应商提供的 DLL 文件,DllImport例如:


[DllImport("Supplier.dll", EntryPoint = "AllocateHandle")]

private static extern bool AllocateHandle(out uint handle, string connectionDetails);


[DllImport("Supplier.dll", EntryPoint = "DeallocateHandle")]

private static extern bool DeallocateHandle(uint handle);


...

使用该AllocateHandle方法,我可以通过提供连接详细信息来检索句柄。然后,我可以使用该句柄来调用我所连接的远程计算机上的方法。DeallocateHandle取消分配该句柄。供应商说这是必要的。


我们发现可以使用相同的连接详细信息检索多个句柄。(例如AllocateHandle("10.1.1.1"); AllocateHandle("10.1.1.1");)那行得通。只是,如果句柄已经存在,我们就无法检索具有不同连接详细信息的句柄。(例如AllocHandle("10.1.1.1"); AllocateHandle("10.1.1.2");)。


但是,当我这样做时,它会起作用:


[DllImport("Supplier.dll", EntryPoint = "AllocateHandle")]

private static extern bool AllocateHandle(out uint handle, string connectionDetails);


[DllImport("Supplier2.dll", EntryPoint = "AllocateHandle")]

private static extern bool AllocateHandle2(out uint handle, string connectionDetails);

AllocateHandle("10.1.1.1"); AllocateHandle2("10.1.1.2");


但每当我们需要更多连接时,我们就必须重新编译。


有没有办法无需复制 DLL 文件即可实现此目的?


手掌心
浏览 101回答 1
1回答

收到一只叮咚

您可以将同一非托管库的多个实例加载到进程中,但必须使用不同的文件名加载它们。在您的场景中,这可能意味着每次需要新实例时都使用临时文件名制作 DLL 的副本。
打开App,查看更多内容
随时随地看视频慕课网APP