Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2009, 01:09   #1
happy_horror
Пользователь
 
Регистрация: 03.03.2009
Сообщений: 15
По умолчанию экспорт функций С++

вроде, на этот раз разделом не ошибся


Сам вопрос в заголовке


В добавок хочу написать: посмотрев хелп в microsoft visual studio я нашёл следующие строки:

Код:
#define DllImport   __declspec( dllimport )
#define DllExport   __declspec( dllexport )

DllExport int i = 10;      /* Okay: this is an export definition. */
и

Код:
#define DllImport   __declspec( dllimport )
#define DllExport   __declspec( dllexport )

extern DllImport int k;   /* These are correct and imply */
Dllimport int j;          /* a declaration. */
якобы для экспорта/импорта нужен вот такой код, но естественно он мне не помог - программа, подключающая длл, функций в ней не находит


собственно, мой код:

Код:
#include "stdafx.h"


#define DllExport   __declspec( dllexport )

DllExport char* ReturnName();//эеспортирую функцию
DllExport void GetName(char* name);//эеспортирую функцию
DllExport void FlushName();//эеспортирую функцию


extern char* s="";


char* ReturnName()//функция возвращает строку
{
	return s;
}


void GetName(char* name)//функция принимает строку и сохраняет её
{
	s = name;
}


void FlushName()//функция очищает переменную по вызову
{
	s = "";
}

Последний раз редактировалось happy_horror; 01.04.2009 в 01:15.
happy_horror вне форума Ответить с цитированием
Старый 01.04.2009, 05:32   #2
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Вот здесь гляньте.
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 01.04.2009, 08:48   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Со строками у вас фигня легко может получиться. Вы копируете не строку, а указатель на неё. Легко попадёте на локальную переменную или просто уже удалите строку, а в DLL еще ссылаетесь на неё.
В GetName нужно выделять память под новую строку и копировать посредством strcpy. Ну или есть еще функция strdup, которая сам всё делает. Но надо еще не забыть очистить память из под уже хранимой строки.
FlushName ничего не очищает. Записывает новое значение, а старое остаётся висеть в памяти.
Перед реализацией каждой функции напишите DllExport и всего делов. Я же говорил, что писал тут и мог где-то лохануться
ЗЫ. Надеюсь, что это у вас два файла *.h и *.cpp, а не в один всё это засунули
pu4koff вне форума Ответить с цитированием
Старый 02.04.2009, 21:18   #4
happy_horror
Пользователь
 
Регистрация: 03.03.2009
Сообщений: 15
По умолчанию

благодарю за ответы


P.S.

извиняюсь за оффтоп:

а обязятельно ли экспорт объявлять в хеадере, а саму функцию пихать в .cpp фаил?
happy_horror вне форума Ответить с цитированием
Старый 03.04.2009, 00:57   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Нет, необязательно. Просто так удобнее хранить прототипы функций, чтобы пользователь, который будет использовать DLL знал, какие функции есть внутри нее.
MaTBeu вне форума Ответить с цитированием
Старый 03.04.2009, 07:54   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Ну и, при правильнмо использовании препроцессора, один и тот же хеадр можно будет использовать и для компиляции DLL и для описания прототипов функций при последующей неявной загрузки библиотеки в программе
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
экспорт в word AD_min Общие вопросы Delphi 4 05.12.2008 14:17
экспорт из Excel в БД Tanuska___:) БД в Delphi 7 27.08.2008 15:31
Экспорт из Access в Excel, Экспорт из отчётов в таблицу Excel Kissedbythegod Microsoft Office Access 1 31.05.2008 22:15
Экспорт в Access е! Marisa Microsoft Office Access 3 31.01.2008 15:32
экспорт таблицы Karl_Karlovi4 Общие вопросы Delphi 1 17.01.2008 13:33