我正在尝试使用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?
答案 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)