在C#中导入DLL

时间:2011-07-20 07:05:02

标签: c# .net dll dllimport

我正在尝试使用DllImport将dll导入到我的C#项目中,如下所示:

[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key,string val,string filePath);

另外,我添加了命名空间System.Runtime.InteropServices:

using System.Runtime.InteropServices;

仍然,我收到一个错误: “当前上下文中不存在名称'DllImport'”

是否可以在类中的哪个位置导入dll?

4 个答案:

答案 0 :(得分:8)

您的声明中可能也有错误的返回类型。尝试使用 bool

[DllImport("kernel32")]
private static extern bool WritePrivateProfileString(string section, string key,string val,string filePath);

参考文献:http://msdn.microsoft.com/en-us/library/ms725501(v=vs.85).aspx

修改

DllImports必须放在你班级的体内。不在方法或构造函数内。

public class Class1
{
     //DllImport goes here:
     [DllImport("kernel32")]
     private static extern ...

     public Class1()
     {
          ...
     }

     /* snip */
}

答案 1 :(得分:2)

在解决方案资源管理器中,右键单击引用,选择“添加引用”,然后将System.Runtime.InteropServices添加到项目中。

如果您的项目中没有引用using <assembly>;,则无法执行此操作。

修改

实际上,只是看到了你对你的问题的评论。我认为(暂时没有完成Interop)它必须在一个函数之外,在类的主体中。

即:

public class MyClass
{

    [DLLImport("kernel32")]
    private static extern long WritePrivateProfileString(string sectio, string key, string val, string filePath);

    public MyClass()
    {
    }

    public void foo()
    {
    }

    // etc, etc
}

答案 2 :(得分:0)

尝试添加这些参数

[DllImport("kernel32",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]

答案 3 :(得分:-1)

通常在导入win dll时你使用不安全的代码母猪一定要检查项目设置这里有两个显示代码的简单教程

code for Kenler32.dll inport

MSDN whit explanation