在C#中导入DLL

5

我正在尝试使用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有限制吗?


你能描述一下在你的类中,你把DLLImport语句放在了哪个位置吗? - Emiswelt
我已经尝试将它放置在我的类构造函数中。也尝试将其放置在其他一些函数中。 - sohil
那就是问题所在。现在请看更新后的答案。 :) - Emiswelt
4个回答

10

你在语句中可能还选择了错误的返回类型。尝试使用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 */
}

已经更改了,但仍然无法正常工作。它根本没有识别DllImport。我猜在它识别之后才会执行函数行。 - sohil

2
在解决方案资源管理器中,右键单击引用,选择添加引用,并将System.Runtime.InteropServices添加到您的项目中。
如果项目中没有引用,您无法使用“using ;”。
编辑:
实际上,刚才看到了您在问题上的评论。我认为(已经有一段时间没有做过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
}

我正在使用<namespace>;这需要的程序集是mscorlib.dll,据我所知,它会自动引用。 - sohil

0

尝试添加这些参数

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

仍然无法工作。它根本不识别 DllImport。我猜参数会在它识别它之后出现。 - sohil

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接