Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание и работа с dll фалами, помогите примером пожалуйста 
V
    Опции темы
Kirill89
  Дата 23.1.2009, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброе время суток.
Я недавно столкнулся с задачей и никак не могу разобраться как её реализовать, очень прошу мне помочь.
Есть некоторая программа на C#, мне нужно написать и использовать в ней dll файл, на C++, который будет содержать функцию по чтению файла (текстового), с параметром (путь к файлу) и возвращать значение string (содержимое фала). и аналогично по записи в файл.
Вопросы такие:
1) как сделать рабочий dll файл, используя visual studio 2005 и синтаксис С++?
2) как этот файл подключить к c# или visual basic?
3) как осуществить работу с файлами и текстовой строкой в таком dll?

Буду очень благодарен, особенно если с примером и инструкцией =)


--------------------
PM MAIL WWW   Вверх
GoldFinch
Дата 23.1.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

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



начни с F1 там все написано
PM MAIL ICQ   Вверх
Kirill89
Дата 23.1.2009, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



GoldFinch, забавно, может ещё пример покажешь?
Я же не для прикола спрашиваю. Такой пример не должен занять много времени, а это мне ОЧЕНЬ поможет разобраться.


--------------------
PM MAIL WWW   Вверх
Rififi
Дата 23.1.2009, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



Kirill89, 
1. www.google.ru => "c++ dll example"
2. www.google.ru => "c# c++ p/invoke"
3. www.google.ru => "c# c++ p/invoke"
PM MAIL   Вверх
shara
Дата 23.1.2009, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



в общем расскажу как делал я, правда насчет С# ничего не знаю я с этим зверем не сталкивался. 

создаем ДЛЛину для этого в MsVC2008 (звыняй 2005 нету  smile ) давим на следующие кнопы: File -> New -> Project -> Win32Project. В запустившемся визарде в зависимости от нужд выбираем то что нас интерисует, в нашем случае выбираем DLL. 

считай пол пути уже есть. Теперь тебе нужно описать функцию DllMain - эта функция вызывается с параметром ul_reason_for_call = DLL_PROCESS_ATTACH и тебе  нужно обработать его, это так называемая инициализация библиотеки.  похожий параметр (DLL_PROCESS_DETACH) функция DllMain принимает и перед тем как библиотека будет выгружаться из памяти. 
Все остальные функции описываешь как в обычной программе, с класами не работал - но они тебе покаместь и не нужы. 
Для того чтобы другие приложения могли вызывать функции из твоей библиотеки тебе в проекте нужно будет создать *.def файл в котором нужно показать компилятору какие функции будут видны вне библиотеки. Выглядит он приблизительно так 
Код

LIBRARY   MyDll
EXPORTS
   Func_1   @1
   Func_2   @2
   Func_3   @3
   MySuperFunc   @4



собсно и все. Компилим библиотеку.

Чтобы подгрузить свою ДЛЛ к проге использем LoadLibrary.
но тебе еще нужно узнать адреса функций находящихся в библиотеке, это делается так:
Код

typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
...

HINSTANCE hDLL;               // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1;    // Function pointer
DWORD dwParam1;
UINT  uParam2, uReturnVal;

hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
   lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
                                           "DLLFunc1");
   if (!lpfnDllFunc1)
   {
      // handle the error
      FreeLibrary(hDLL);
      return SOME_ERROR_CODE;
   }
   else
   {
      // call the function
      uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
   }
}



и еще, чувак если с англиqским не проблема - не ленись юзать MSDN




 


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
Kirill89
Дата 24.1.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



shara, во, большое спасибо!
dll получилась, но как её подключить...? через add->existing item не получилось - программа не видит функций.

Добавлено через 2 минуты и 6 секунд
разобрался. всем спасибо.


--------------------
PM MAIL WWW   Вверх
shara
Дата 24.1.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Kirill89, 
you are wellcom   smile 

Это сообщение отредактировал(а) shara - 24.1.2009, 00:24


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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