gpt4 book ai didi

c#:如何知道DllImport中使用的dll的完整路径?

转载 作者:太空狗 更新时间:2023-10-29 22:17:21 25 4
gpt4 key购买 nike

我已经像这样在我的代码中导入了 dll:

[DllImport("dll.dll", CharSet = CharSet.Ansi)]
private static extern int function(String pars, StringBuilder err);

我想知道该功能是否有效,但它不在项目内,也不在 Debug 或 Release 文件夹内。 IE。 “dll.dll”不应该可用,因为它不在当前项目文件夹中,但它是可用的。现在我想知道运行时使用的dll的确切完整路径,但不知道如何获取它。

最佳答案

您将不得不使用 win32 API。

第一次使用GetModuleHandle将“dll.dll”传递给它。然后将该句柄传递给 GetModuleFileName .

string GetDllPath()
{
const int MAX_PATH = 260;
StringBuilder builder = new StringBuilder(MAX_PATH);
IntPtr hModule = GetModuleHandle("dll.dll"); // might return IntPtr.Zero until
// you call a method in
// dll.dll causing it to be
// loaded by LoadLibrary

Debug.Assert(hModule != IntPtr.Zero);
uint size = GetModuleFileName(hModule, builder, builder.Capacity);
Debug.Assert(size > 0);
return builder.ToString(); // might need to truncate nulls
}

[DllImport("kernel32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr GetModuleHandle(string lpModuleName);

[DllImport("kernel32.dll", SetLastError=true)]
[PreserveSig]
public static extern uint GetModuleFileName
(
[In] IntPtr hModule,
[Out] StringBuilder lpFilename,
[In][MarshalAs(UnmanagedType.U4)] int nSize
);

关于c#:如何知道DllImport中使用的dll的完整路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5526313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com