Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подключение dll файла 
V
    Опции темы
kma
Дата 28.12.2005, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 1.12.2005

Репутация: нет
Всего: нет



Есть “dll” файл, написанный на С++, подскажите, пожалуйста, как его можно подключить к своему проекту. Если можно дайте пример.

Зарине спасибо.
PM MAIL   Вверх
mr.DUDA
Дата 28.12.2005, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Есть такой атрибут [DllImport("mylib.dll")], ставим его над статическим методом (имя метода при этом совпадает с именем какой-нить ф-ции экспортируемой из длл) и пользуемся "как своим родным" методом класса. Типы аргументов - соответствующие: для int, double, bool, float - остаются как есть; строки типа char* и short* "как по волшебству" превращаются в string; структуры передаются как есть; указатели - через IntPtr.


--------------------
user posted image
PM MAIL WWW   Вверх
kma
Дата 28.12.2005, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 1.12.2005

Репутация: нет
Всего: нет



Спосибо за помощь smile


Я подключил системный файл “[DllImport("Kernel32.dll")]” и вызвал функцию “protected static extern IntPtr CreateFileA” . Пишет, что эта функция закрыта, что делать

Это сообщение отредактировал(а) kma - 28.12.2005, 17:26
PM MAIL   Вверх
mr.DUDA
Дата 28.12.2005, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Наверное, не надо указывать букву "А" или "W" в конце имени ф-ции, т.к. рантайм сам определит, какой вариант функции - юникодовский или ANSI'шный - использовать при вызове. Вот как ф. CreateFile используется в System.Microsoft.Win32.NativeMethods:

Код
[DllImport("kernel32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr CreateFile(string lpFileName, int dwDesiredAccess, int dwShareMode, NativeMethods.SecurityAttributes lpSecurityAttributes, 
int dwCreationDisposition, int dwFlagsAndAttributes, HandleRef hTemplateFile);



--------------------
user posted image
PM MAIL WWW   Вверх
kma
Дата 28.12.2005, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 1.12.2005

Репутация: нет
Всего: нет



Попробовал, но все равно пишет “new protected member declared in sealed class”
PM MAIL   Вверх
mr.DUDA
Дата 28.12.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(kma @ 28.12.2005, 16:37)
Попробовал, но все равно пишет “new protected member declared in sealed class”

Эта ошибка не относится к DllImport, скорее всего просто класс, объявивший метод CreateFile, унаследован от sealed-класса. Нужно либо убрать наследование вообще, либо унаследоваться от другого класса.


--------------------
user posted image
PM MAIL WWW   Вверх
kma
Дата 28.12.2005, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 1.12.2005

Репутация: нет
Всего: нет



Я свой класс не от кого не наследовал
PM MAIL   Вверх
mr.DUDA
Дата 28.12.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Код рабочий, файл создаёт:
Код
using System;
using System.Runtime.InteropServices;

class Test
{
    [StructLayout(LayoutKind.Sequential)]
    class SecurityAttributes
    {
        public int nLength;
        public IntPtr lpSecurityDescriptor;
        public bool bInheritHandle;
        public SecurityAttributes() {}
    }

 
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    static extern IntPtr CreateFile(string lpFileName, int dwDesiredAccess,
 int dwShareMode, SecurityAttributes lpSecurityAttributes, int dwCreationDisposition, 
int dwFlagsAndAttributes, HandleRef hTemplateFile);

    static void Main(string[] args)
    {
        const int CREATE_ALWAYS = 2;
        const int GENERIC_WRITE = 0x40000000;

        SecurityAttributes sa = new SecurityAttributes();
        CreateFile("c:\\1.txt", GENERIC_WRITE, 0, sa, CREATE_ALWAYS, 0, new HandleRef(null, IntPtr.Zero));
    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.