Импорт DLL в C # - PullRequest
       40

Импорт DLL в C #

3 голосов
/ 20 июля 2011

Я пытаюсь импортировать dll в мой проект C # с помощью DllImport следующим образом:

[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 ]

8 голосов
/ 20 июля 2011

Возможно, вы также указали неправильный тип возврата в своем утверждении. Попробуйте с 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

EDIT

DllImports должны быть размещены внутри тела вашего класса. Не внутри методов или конструктора.

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

     public Class1()
     {
          ...
     }

     /* snip */
}
2 голосов
/ 20 июля 2011

В обозревателе решений щелкните правой кнопкой мыши ссылки, выберите Добавить ссылку и добавьте 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
}
0 голосов
/ 20 июля 2011

обычно при импорте win dll вы используете небезопасный код, поэтому обязательно проверьте настройки проекта, вот два простых урока, в которых показан код

код для входа Kenler32.dll

MSDN с объяснением

0 голосов
/ 20 июля 2011

Попробуйте добавить эти параметры

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