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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> _export 
:(
    Опции темы
mister2010
Дата 1.6.2010, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Что означает вот этот идентификатор _export? 
PM MAIL   Вверх
A5uKa
Дата 2.6.2010, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

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



Создание библиотеки импорта этого.
export - получение из этой библиотеки этого, после её подключения.

PM   Вверх
Dem_max
Дата 2.6.2010, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



говорим что мы хотим экспортировать переменную, функцию, класс и т.д.  из допустим DLL при статической линковке.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
mister2010
Дата 2.6.2010, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Почему  _export должен находится внутри фигурных скобок 
Код

extern "C" {
void WINAPI _export masha()
               }

PM MAIL   Вверх
A5uKa
Дата 2.6.2010, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

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



Не должен, а extern "C" полагаю означает, что Маша написана на C, так всё получается вполне логично )
PM   Вверх
mister2010
Дата 2.6.2010, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Когда я подключил скомпилированный длл к файлу екзе, каким образом идёт пользование экспортируемыми функциями, они вызываются в файле екзе?

Это сообщение отредактировал(а) mister2010 - 2.6.2010, 15:25
PM MAIL   Вверх
Dem_max
Дата 2.6.2010, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ну как у тебя функции вызываются обычные, так и из DLL


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
mister2010
Дата 2.6.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Файл езке вызывает функции которые я экспортировал?
PM MAIL   Вверх
mister2010
Дата 3.6.2010, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



export - получение из этой библиотеки вызово функций, после её подключения, а екстерн, это для самого файла FAR.dll чтоб в этом файле  FAR.dll можно было реализовать функции, прототипы которых мы взяли из файла plugin.hpp?

PM MAIL   Вверх
bsa
Дата 4.6.2010, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



mister2010, если не секрет, что у тебя с русским языком? Ну нельзя же делать столько ошибок!

Есть два кардинально противоположных ключевых слов (нестандартных): __export и __import. Когда ты пишешь библиотеку, то ты помечаешь все функции/классы/переменные атрибутом __export. Таким образом, эти объекты помещаются в публичную область библиотеки. Затем, когда ты пишешь программу, использующую эту библиотеку, ты помечаешь объявления тех же самых функций/классов/переменных словом __import. В этом случае компилятор будет пытаться найти указанные объекты в динамических библиотеках, которые ты подключаешь к проекту.
Правильные программисты народ ленивый (китайцы, индусы и им подобные не в счет). Им лень писать два раза один и тот же код, поэтому они делают один общий хидер с объявлениями функций/классов/переменных, используя макросы препроцессора для подстановки правильных __export/__import. Делается это так:
Код
#ifndef _MYHEADER_H
#define _MYHEADER_H

#ifdef MYLIB_BUILD
#define DLLPUBLIC __export
#else
#define DLLPUBLIC __import
#endif

class DLLPUBLIC MyClass
{
//....
};


extern "C" DLLPUBLIC void myfunc();

extern DLLPUBLIC int myvar;

#endif /* _MYHEADER_H */

extern "C" нужен для того, чтобы компилятор сгенерировал имя функции в стили языка С. Так как в противном случае будет очень сложно его узнать для ручного импорта из библиотеки (GetProcAddress).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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