C# 获取完整路径并转换为常量

C# 获取完整路径并转换为常量,c#,C#,你好。我正试图根据自己的需要重新制作dll。即,将搜索路径更改为dll 德林波特: [DllImport(NativeLibraryName, EntryPoint = "SteamAPI_Init", CallingConvention = CallingConvention.Cdecl)] [return: MarshalAs(UnmanagedType.I1)] public static extern bool SteamAPI_Init(); 常数: internal const s

你好。我正试图根据自己的需要重新制作dll。即,将搜索路径更改为dll

德林波特:

[DllImport(NativeLibraryName, EntryPoint = "SteamAPI_Init", CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool SteamAPI_Init();
常数:

internal const string NativeLibraryName = @"steam_api64";
获取文件夹的路径:

public static string SteamFolderPath()
{
      var r = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Valve\Steam", "InstallPath", null);
      var rpath = r + "/steamapps/common/mygame/steam_api64";
      return r.ToString();
}
当我尝试这样做时,错误就会出现:

internal const string NativeLibraryName = SteamFolderPath() + @"steam_api64";
我尝试了静态只读字符串。没什么帮助。希望只为你)怎么做?如何尝试先获得第一条路径,然后将其设置为常数


p、 我正在重做Steamworks.NET库。

在编译时必须知道一个常量。它不能依赖于函数的返回值

您需要使用
SetDllDirectory
将Steam路径添加到DLL搜索路径:

[DllImport("kernel32")]
static extern bool SetDllDirectory(string lpPathName);
string SteamPath = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Valve\Steam", "InstallPath", null) + @"\steamapps\common\mygame\steam_api64";
SetDllDirectory(SteamPath); 

[DllImport("steam_api64")]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool SteamAPI_Init();

const
必须是编译器可以在编译时完全计算的文本值。请发布您使用
static readonly
得到的代码和错误,因为这似乎更适合您的情况。您不能使用const,因为它不是常数-您正在使用该方法计算它。尝试静态只读字符串时会出现什么错误?(来自DllImport的错误)-NativelLibraryName“属性的参数必须是常量表达式、typeof表达式或用于创建与属性参数相同类型数组的表达式。”System.DllNotFoundException:“无法加载DLL”steam\u api64“:找不到指定的模块。(HRESULT:0x8007007E的例外情况):(抱歉,请尝试将@“\steamapps\common\mygame\steam\U api64”添加到您的SteamPath?opps我忘记添加“\”并使用“steamapps…”。。。“.Lol…有效..非常感谢。有一个问题…如果我嵌入这个dll,在我的程序中使用SetDllDirectory,整个程序中的路径会变为其他dll吗?或者这个代码只针对这个dll吗?(我无法真正表达这个问题,希望你理解我)p.s.再次感谢)该目录将添加到在其中搜索DLL的目录列表中。它将被添加到列表的较高位置,因此如果它们具有相同的名称,则有可能找到一个Steam DLL而不是系统DLL。清单和顺序见