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

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

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

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

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

Результаты опроса: Ваш выбор ???
Delphi 38 59.38%
C++ 26 40.63%
Голосовавшие: 64. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2009, 17:22   #51
GHost007
Ich Sing Nicht
Пользователь
 
Аватар для GHost007
 
Регистрация: 15.03.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
GHost007, вопрос как настоящему С++ кодеру. (честно! пожалуйста не смейтесь)
В Delphi если я хочу импортировать функцию из DLL статически я делаю так

и всё! ничего больше не нужно!
как осуществить тоже самое на С++ без *.LIB файлов, т.е. взял, бабахнул одну строчку и пошёл юзать функцию. Я просто хочу узнать как это делается в С++.
при DLL :

Код:
Void Say(char * str){
   Messagebox(NULL, str, "Hello", MB_OK);
}
CPP фаил :

Код:
HMODULE h = LoadLibrary("Ваша_dll.dll");
If(h){
   void(*ptr)(char*);
   (FARPROC&)ptr = GetProcAddress(h, "Say");
   ptr("test");
   FreeLibrary(h);
}
и далее можно простым "ptr" вызывать функцию в любом удобном месте.
He laughs best who laughs last.
GHost007 вне форума Ответить с цитированием
Старый 27.03.2009, 17:37   #52
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

я же сказал что надо статически, а не динамически! специально выделил это слово в предыдущем посте.
rpy3uH вне форума Ответить с цитированием
Старый 27.03.2009, 17:43   #53
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Статическая так "красиво" без lib'ы не получится вроде как. А оно надо?
Есть программы, с помощью которых можно из dll получить lib и не вижу необходимости в добавлении этой фичи в язык и нагружать этим делфийский линкер. А при перекомпиляции линкер будет шуршать по этой dll и искать нужные функции?
Зато с lib-файлом можно скомпилить прогу без наличия dll )
pu4koff вне форума Ответить с цитированием
Старый 27.03.2009, 17:47   #54
GHost007
Ich Sing Nicht
Пользователь
 
Аватар для GHost007
 
Регистрация: 15.03.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
я же сказал что надо статически, а не динамически! специально выделил это слово в предыдущем посте.
Для этого нужно декларировать функцию с модификатором __declspec( dllexport ) для DLL и __declspec( dllimport ) для приложения.
He laughs best who laughs last.
GHost007 вне форума Ответить с цитированием
Старый 27.03.2009, 17:47   #55
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Что короче. Это:
Код:
procedure foo(a: integer; var b: integer);
var
  i: integer;
begin
  b := 0;
  for i := 0 to a do
  begin
    b := b + i;
  end;
end;
Или это:
Код:
void foo(int a, int &b)
{
  b = 0;
  for (int i = 0; i <= a; ++i)
  {
    b += i;
  }
}
Читаемость кода в обоих случаях одинакова для меня.
А что если нужен цикл с шагом в 5? Придется в while переделывать, не так ли?
И зачем так сделан repeat/until? Никто по началу не путался, что там ложное условие надо указывать, в отличии от while?)

Если на формочку кнопочки кидать и обработчики заполнять, то это не критично, но если писать с десяток-другой классов и для каждого метода писать эти procedure,function,begin,end. Меня это раздражает, т.к. я отвлекаюсь от решения задачи и превращаюсь в машинистку какую-то.
Код:
procedure foo(a: integer; var b: integer);
var
  i: integer;
begin
  b := 0;
  for i := 0 to a do
  begin
    b := b + 5*i;
  end;
end;
Вот тебе и с шагом пять.
Alar вне форума Ответить с цитированием
Старый 27.03.2009, 17:51   #56
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от GHost007 Посмотреть сообщение
Для этого нужно декларировать функцию с модификатором __declspec( dllexport ) для DLL и __declspec( dllimport ) для приложения.
ну так LIB файлы нужны в этом случае или нет?
rpy3uH вне форума Ответить с цитированием
Старый 27.03.2009, 17:56   #57
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Статическая так "красиво" без lib'ы не получится вроде как. А оно надо?
Есть программы, с помощью которых можно из dll получить lib и не вижу необходимости в добавлении этой фичи в язык и нагружать этим делфийский линкер. А при перекомпиляции линкер будет шуршать по этой dll и искать нужные функции?
Зато с lib-файлом можно скомпилить прогу без наличия dll )
Я что-то не понял, либы это такие файлики. которые подгружаются в оперативку и их может юзать ни одна сотня программ?

и для delphi понаписано куча модулей и компонент, только почему мы понимаем, что предпочтителней по возможности юзать стандартные dll.

P.S > GHost007 - 2 штрафа получил за флудофлейм.
Alar вне форума Ответить с цитированием
Старый 27.03.2009, 17:58   #58
GHost007
Ich Sing Nicht
Пользователь
 
Аватар для GHost007
 
Регистрация: 15.03.2009
Сообщений: 42
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
ну так LIB файлы нужны в этом случае или нет?
вот код:

Код:
#define BUILD_DLL
#include "p.h"
#pragma hdrstop
//-------------------------------------------------
// здесь будет много текста
//-------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
 {
	return 1;
 }
//-------------------------------------------------------------------------
void Message(char *s) 
{
	i=10;
	Application->MessageBox(s,"From DLL",IDOK);
}
Файл P.h
#if defined(BUILD_DLL)
# define DLL_EXP __declspec(dllexport)
#else
# if defined(BUILD_APP)
# define DLL_EXP __declspec(dllimport)
# else
# define DLL_EXP
# endif
#endif
DLL_EXP void Message(char *s);
DLL_EXP int i;
p.s. я так понимаю данный вопрос касается того, что С++ менее удобный ?
He laughs best who laughs last.
GHost007 вне форума Ответить с цитированием
Старый 27.03.2009, 18:00   #59
Bearw08
Boom-boom)
Форумчанин
 
Аватар для Bearw08
 
Регистрация: 02.02.2009
Сообщений: 500
По умолчанию

Прикольно наблюдать баталии, на одних форумах защищают С/С++ на других делфи )))

По теме: ТС ты это завел ради холивара? ну разве не понятно, что все правакационные темы сводятся к флуду/холливару ?!


Если реально интересно, то попробуй оба языка-что понравится, на том и пиши. А то тема переросла , извините , в меренье пис**ми, честное слово
¡ʁɔvʎнdǝʚǝdǝu dиw
Bearw08 вне форума Ответить с цитированием
Старый 27.03.2009, 18:27   #60
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
Я что-то не понял, либы это такие файлики. которые подгружаются в оперативку и их может юзать ни одна сотня программ?
В C++ при создании dll, генерируется *.lib файл, в котором содержатся данные о экспортируемых из dll функциях: Имя функции, параметры и еще что необходимо. При статической загрузке dll соответственно линкер находит этот lib файл и берет оттуда всю необходимую инфу. Я так понимаю, что делфийский линкер просто сам все эти данные берёт из dll, что вероятно увеличивает время линкования.
Поправьте меня, в чем неправ, т.к. с dll почти не работал.
pu4koff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Требуется программист Delphi или VB или C#. Анна Долбилина Фриланс 11 04.08.2008 10:04
delphi 9 или delphi 2005 вопрос о работе Doget Компоненты Delphi 0 07.07.2008 08:50
Перспективы развития рунета, заметки и некоторые выводы. Alar Свободное общение 13 22.01.2008 16:05
delphi или C++ sergey07 Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 10.11.2007 20:45