我正在构建C#库(.dll),其中一些类使用本机Windows API函数。具体而言,函数GetPrivateProfileString
和WritePrivateProfileString
,如:
static class NativeMethods
{
// external functions for working with ini files
[DllImport("kernel32.DLL", EntryPoint = "GetPrivateProfileStringW",
SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
public static extern int GetPrivateProfileString(string lpAppName, string lpKeyName,
string lpDefault,
string lpReturnString,
int nSize,
string lpFilename);
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern bool WritePrivateProfileString(string lpAppName,
string lpKeyName,
string lpString,
string lpFileName);
}
使用它们:
NativeMethods.GetPrivateProfileString(section, key, "", result, 127, this.path);
NativeMethods.WritePrivateProfileString(section, key, " " + value, this.path);
当我在另一个项目中直接使用这个类时(不使用它来自dll),它可以正常工作。但是当我将它构建到dll中,然后在另一个项目中引用这个dll,那么这些函数就不起作用了。他们什么都不做。
答案 0 :(得分:0)
哦,我发现了错误。我被迫在当前目录中查找ini文件路径(在我的DLL类代码中)。当我从DLL调用它时,它会自动在 C:\ Windows 中查找文件。使用Directory.GetCurrentDirectory() + iniFile
后,它可以正常工作。