使用本机Windows API创建C#库

时间:2015-08-26 08:38:56

标签: c# dll dllimport

我正在构建C#库(.dll),其中一些类使用本机Windows API函数。具体而言,函数GetPrivateProfileStringWritePrivateProfileString,如:

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,那么这些函数就不起作用了。他们什么都不做。

1 个答案:

答案 0 :(得分:0)

哦,我发现了错误。我被迫在当前目录中查找ini文件路径(在我的DLL类代码中)。当我从DLL调用它时,它会自动在 C:\ Windows 中查找文件。使用Directory.GetCurrentDirectory() + iniFile后,它可以正常工作。