powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ exe проект как DLL
25 сообщений из 58, страница 1 из 3
C++ exe проект как DLL
    #39386441
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пусть есть C++ EXE проект. Из этого экзешника надо организовать Export-функции. Такие EXE реально существуют. Что и как нужно сделать, чтобы это реализовать? В стиле WinAPI, для начала.

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386456
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RTFM declspec dllexport.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386462
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovRTFM declspec dllexport.
И все? А настройки проекта (VS 2015)? Экспорт в стиле ДЛЛ из экзешника у меня не получился. М.б. птичку где поставить?
Вообще, в инете пишут, что масса проблем, но более менее чего-то конкретного нет.
А библиотеки классов как? Вообще надо работать с методами и переменными самого экзешника.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386464
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAИ все? А настройки проекта (VS 2015)? Экспорт в стиле ДЛЛ из экзешника у меня не получился.

Да вроде всё. Нет никакой разницы между экспортом из DLL и экспортом из EXE.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386467
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS Для примера. Пусть, скажем, есть консольное приложение Win32. Надо экспортировать последнюю строку с экрана.
вроде всего несколько строк.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386474
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAДля примера. Пусть, скажем, есть консольное приложение Win32. Надо экспортировать
последнюю строку с экрана. вроде всего несколько строк.

Мелкомягкого монстра мне заводить лень, так что извини, пример будет с GCC.
Вот исходник:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#include <stdio.h>

extern "C" __declspec(dllexport) int f()
{
   printf("oops");
}

int main()
{
   f();
   return 0;
}


Вот строка сборки: g++ exeexp.cpp -o exeexp -m32
Вот выдержка из результата tdump exeexp.exe:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
******************************************************************************
Section:             Exports
File Offset:         00002600 (9728)
   Flags:             00000000
   Time Stamp:        587E7793 : Tue Jan 17 20:59:15 2017
   Major Version:     0000
   Minor Version:     0000

Exports from exeexp.exe
   1 exported name(s), 1 export addresse(s).  Ordinal base is 1.
   Sorted by Name:
     RVA      Ord. Hint Name
     -------- ---- ---- ----
     00001500    1 0000 f


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386479
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, Спасибо, у меня в VS примерно тоже самое, но пока не работает. Попробую разобраться.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386523
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь загвоздка. Консольное приложение не воспринимает string ни в каком виде.
Код: plaintext
1.
string str ="aaaaa\n";

Пишет -
Код: plaintext
1.
	идентификатор "string" не определен

Не понимаю - string, string.h, using namespace std - все это есть. Что еще этой string не хватает? Ошибка только в cpp. В h-файлах ошибок не наблюдается.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386562
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAСпасибо, у меня в VS примерно тоже самое, но пока не работаетможно ещё попробовать стандартный способ через def-файл, у меня так работал импорт из exe
Ошибка только в cpp. В h-файлах ошибок не наблюдается.проверь порядок включения #include<string>
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386574
ermak.nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA, странно, ибо http://www.cplusplus.com/reference/string/
Кажется мне, что ошибка где-то в другом месте, можете код показать?
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386696
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAПусть есть C++ EXE проект. Из этого экзешника надо организовать Export-функции. Такие EXE реально существуют. Что и как нужно сделать, чтобы это реализовать? В стиле WinAPI, для начала.

[]

нужно сделать ровно то же, что и при экспорте из .DLL, не отличается ничем.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386699
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAПусть есть C++ EXE проект. Из этого экзешника надо организовать Export-функции. Такие EXE реально существуют. Что и как нужно сделать, чтобы это реализовать? В стиле WinAPI, для начала.


Такой экспорт будет работать только при вызове из своего же EXE. Если вызовешь его например из приложения на Дельфи - оно скрашится.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386703
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,
а, рекомендую через .DEF файл.
__declspec __dllexport при этом не обязателен.
и надо еще добавить ключик чтобы линкер собрал библиотеку импорта.

там не сложно, никаких подводных камней нет.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386711
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAТеперь загвоздка. Консольное приложение не воспринимает string ни в каком виде.
Код: plaintext
1.
string str ="aaaaa\n";

Пишет -
Код: plaintext
1.
	идентификатор "string" не определен

Не понимаю - string, string.h, using namespace std - все это есть. Что еще этой string не хватает? Ошибка только в cpp. В h-файлах ошибок не наблюдается.


YUBA, ты бы хоть уже книжку какую почитал, прежде чем с экспортом- то баловаться...

как бы есть принцип "от простого к сложному",
а то люди не понимая делают одну хрень, потом другую, не понимая уже две вещи, и так далее, и получается что? "Специалист", который думает, что он все знает и умеет, потому что он уже все это делал, а он не знает тем не менее элементарных вещей, не понимает их...
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39386748
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivYUBA, ты бы хоть уже книжку какую почитал, прежде чем с экспортом- то баловаться...
как бы есть принцип "от простого к сложному",
а то люди не понимая делают одну хрень, потом другую, не понимая уже две вещи, и так далее, и получается что? "Специалист", который думает, что он все знает и умеет, потому что он уже все это делал, а он не знает тем не менее элементарных вещей, не понимает их...Да, читал я. Не согласен, с обоими.(с).
Последнюю книжку, которую я чмтал по C++ - это было по VS 6, аж в 99 г. С тех пор VB, C#. Так что С++ полузабытый язык. Многое изменилось. А на непонятки есть MSDN и Форум.
А сама EXE-DLL неожиданно скомпилировалась. В чем было дело не понял, т.к. код вообще тот же самый.
Кстати, не так давно на одном из форумов утверждалось, что экспорт из EXE вообще невозможен иначе чем прикомпиляцией dll к экзешнику, как это делает Дельфи.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387104
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу функцию
Код: plaintext
1.
hModule = LoadLibrary("EXEtransmit.exe");

Все как у всех.
Выдает единственную ошибку
Код: plaintext
1.
Ошибка	C2664	"HMODULE LoadLibraryW(LPCWSTR)": невозможно преобразовать аргумент 1 из "const char [16]" в "LPCWSTR"

VS 2015. Что ей не нравится? Понятно, что тип данных, однако и во всех экземплах строка, и ничего. А LPCWSTR как тип на msdn вообще не ищется.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387118
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
hModule = LoadLibrary(L"EXEtransmit.exe");

?
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387128
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych
Код: plaintext
1.
hModule = LoadLibrary(L"EXEtransmit.exe");

?Понял.
А почему в большинстве экземплов без L? Ошибки или новая редакция?
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387133
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAА почему в большинстве экземплов без L? Ошибки или новая редакция?

Открой для себя чудесный мир юникода. И спроси себя: "зачем я в свойствах проекта поставил
эту галочку?"
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387140
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovОткрой для себя чудесный мир юникода. И спроси себя: "зачем я в свойствах проекта поставил
эту галочку?" Не виноватая я (с). Она сама ко мне пришла. ))
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387214
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAА почему в большинстве экземплов без L?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
// WinBase.h
HMODULE
WINAPI
LoadLibraryA(
    __in LPCSTR lpLibFileName
    );
WINBASEAPI
__out_opt
HMODULE
WINAPI
LoadLibraryW(
    __in LPCWSTR lpLibFileName
    );
#ifdef UNICODE
#define LoadLibrary  LoadLibraryW
#else
#define LoadLibrary  LoadLibraryA
#endif // !UNICODE

вот поэтому
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387224
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychвот поэтомуПонятно.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387540
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже у меня проблемы со средой, или совокупностью - среда - внды (VS 2015 Essen-le, win10 pro).
Итак, проект компилируется нормально, но при запуске из среды приложение выполняется, но DLL не загружается. При запуске на отладку, он долго копается в C:\Windows\SysWOW64 и его выбивает на hModule = LoadLibrary("DllEx.dll"); или на //#pragma comment(lib,"DllEx.lib"). DLL и LIB рассованы уже всюду, где нужно и не нужно.
При запуске непосредственно экзешника dll загружается. Все остальное уже закомментировано в процессе изысканий.))
Куда бежать, что смотреть?
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387544
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При использовании LoadLibrary() не надо никаких LIB.
У тебя оба (EXE и DLL) скомпилированы под одну платформу (x86/x64) ?
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387548
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovYUBAА почему в большинстве экземплов без L? Ошибки или новая редакция?

Открой для себя чудесный мир юникода. И спроси себя: "зачем я в свойствах проекта поставил
эту галочку?"

MSVC сам ее ставит по дефолту при создании нового проекта.

Для отключения в свойствах проекта поменять General - Charaster set = Not set
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ exe проект как DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]