powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ exe проект как DLL
58 сообщений из 58, показаны все 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
C++ exe проект как DLL
    #39387551
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПри использовании LoadLibrary() не надо никаких LIB.
У тебя оба (EXE и DLL) скомпилированы под одну платформу (x86/x64) ?Это разные варианты (видишь -//#pragma), но и так и так ошибка при запуске из среды. Все х86. Иначе бы и при запуске из папки не грузилось.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387567
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вылетает на строке
Код: plaintext
1.
hModule = LoadLibrary("DllEx.dll");


то проблема в коде DLL. Смотри что там в DllMain() происходит.

Можно отладчиком: в проекте с DLL укажи какой EXE запускать.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387580
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕсли вылетает на строке
Код: plaintext
1.
hModule = LoadLibrary("DllEx.dll");

то проблема в коде DLL. Смотри что там в DllMain() происходит.
Можно отладчиком: в проекте с DLL укажи какой EXE запускать. DLL там вообще никакая, типа - вернуть число 5. Нечему там не работать. Но даже до этого еще не дошло.
При запуски экзешника из папки все работает штатно. При запуске из среды без отладки - работает, но dll не грузится. При запуске на отладку просто вылетает. Т.е. проблемы не в dll, а скорее в среде, имхо.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387597
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что она пишет при запуске на отладку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
"EXERecive.exe" (Win32). Загружено "C:\Windows\SysWOW64\fltLib.dll". Невозможно найти или открыть PDB-файл.
"EXERecive.exe" (Win32). Загружено "C:\Windows\SysWOW64\ntmarta.dll". Невозможно найти или открыть PDB-файл.
"EXERecive.exe" (Win32). Загружено "C:\Windows\SysWOW64\msvcp140d.dll". Невозможно найти или открыть PDB-файл.
"EXERecive.exe" (Win32). Загружено "C:\Windows\SysWOW64\vcruntime140d.dll". Невозможно найти или открыть PDB-файл.
"EXERecive.exe" (Win32). Загружено "C:\Windows\SysWOW64\ucrtbased.dll". Невозможно найти или открыть PDB-файл.
"EXERecive.exe" (Win32). Загружено "C:\Users\YUBA\Documents\Visual Studio 2015\EXERecive\Debug\DllEx.dll". Невозможно найти или открыть PDB-файл.
"EXERecive.exe" (Win32). Выгружено "C:\Users\YUBA\Documents\Visual Studio 2015\EXERecive\Debug\DllEx.dll"
"EXERecive.exe" (Win32). Загружено "C:\Windows\SysWOW64\kernel.appcore.dll". Невозможно найти или открыть PDB-файл.
Программа "[1748] EXERecive.exe" завершилась с кодом 0 (0x0).

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

На форумах пишут много ерунды, 95% людей -- идиоты.
На нашем пишут только правду :-)
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387625
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Затестил в 2015, все работает.
TestDLL.dll - проект Win32 - DLL
TestDLL.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#pragma once

#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif

extern "C" TESTDLL_API int test(int x);


TestDLL.cpp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#include "testdll.h"
#include "stdio.h"

TESTDLL_API int test(int x) {
	return x + 1;
}


BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
	printf("DllMain(%d)\n", ul_reason_for_call);
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}

EXE - Проект Win32, консольное приложение
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#include <windows.h>
#include <stdio.h>

typedef int(*test_t) (int);

int main()
{
	HMODULE h = LoadLibrary("testdll.dll");
	if (h == NULL) {
		printf("DLL not load\n");
		return 0;
	}
	test_t test = (test_t)GetProcAddress(h, "test");
	if(test == NULL) {
		printf("test() not found() \n");
		return 0;
	}
	printf("Load OK\n%d\n", test(3));
	return 0;
}

...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387643
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЗатестил в 2015, все работает.К вечеру попробую.
На вскидку, разницы нет.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387650
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, кстати, если не затруднит, запустите проект на отладку. Пишет что-то подобное?
Код: plaintext
1.
2.
3.
4.
5.
"EXERecive.exe" (Win32). Загружено "C:\Windows\SysWOW64\version.dll". Невозможно найти или открыть PDB-файл.
"EXERecive.exe" (Win32). Загружено "C:\Windows\SysWOW64\ole32.dll". Невозможно найти или открыть PDB-файл.
"EXERecive.exe" (Win32). Загружено "C:\Windows\SysWOW64\fltLib.dll". Невозможно найти или открыть PDB-файл.
"EXERecive.exe" (Win32). Загружено "C:\Windows\SysWOW64\ntmarta.dll". Невозможно найти или открыть PDB-файл.
"EXERecive.exe" (Win32). Загружено "C:\Windows\SysWOW64\msvcp140d.dll". Невозможно найти или открыть PDB-файл.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387665
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAПишет что-то подобное?
А что тебя а этом, собственно, смущает?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387667
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишет подобное'Test.exe' (Win32): Loaded 'C:\Test\Debug\Test.exe'. Symbols loaded.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\vcruntime140d.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ucrtbased.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\api-ms-win-core-timezone-l1-1-0.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\api-ms-win-core-file-l2-1-0.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\api-ms-win-core-localization-l1-2-0.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\api-ms-win-core-synch-l1-2-0.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\api-ms-win-core-processthreads-l1-1-1.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\api-ms-win-core-file-l1-2-0.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\advapi32.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcrt.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sechost.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\rpcrt4.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sspicli.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cryptbase.dll'. Cannot find or open the PDB file.
'Test.exe' (Win32): Loaded 'C:\Test\Debug\TestDLL.dll'. Symbols loaded.
The program '[4144] Test.exe' has exited with code 0 (0x0).

Если я правильно понимаю PDB файл это отладочная инфа, а это просто предупреждение что этой инфы нет, т.е. если в эти DLL отладчиком полезешь, то увидишь ассемблерный код.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387676
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA
Код: plaintext
1.
2.
3.
...
"EXERecive.exe" (Win32). Загружено "C:\Users\YUBA\Documents\Visual Studio 2015\EXERecive\Debug\DllEx.dll". Невозможно найти или открыть PDB-файл.
"EXERecive.exe" (Win32). Выгружено "C:\Users\YUBA\Documents\Visual Studio 2015\EXERecive\Debug\DllEx.dll"


По моему что-то не так с твоей DLL. Проверь что DllMain() возвращает, скорее всего FALSE.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387689
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, 3 разных результата при 3 разных способах запуска проги. Должна быть причина.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387714
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA3 разных результата при 3 разных способах запуска проги. Должна быть причина.

Причина чего? Повторяю вопрос ещё раз, медленно: что именно тебе не нравится в приведённых
тобой сообщениях?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387774
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЗатестил в 2015, все работает.
TestDLL.dll - проект Win32 - DLL
TestDLL.h
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#pragma once

#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif

extern "C" TESTDLL_API int test(int x);


TestDLL.cpp
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#include "testdll.h"
#include "stdio.h"

TESTDLL_API int test(int x) {
	return x + 1;
}


BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
	printf("DllMain(%d)\n", ul_reason_for_call);
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}

EXE - Проект Win32, консольное приложение
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#include <windows.h>
#include <stdio.h>

typedef int(*test_t) (int);

int main()
{
	HMODULE h = LoadLibrary("testdll.dll");
	if (h == NULL) {
		printf("DLL not load\n");
		return 0;
	}
	test_t test = (test_t)GetProcAddress(h, "test");
	if(test == NULL) {
		printf("test() not found() \n");
		return 0;
	}
	printf("Load OK\n%d\n", test(3));
	return 0;
}

Все тоже самое. DLL не грузится. Прога пишет - DLL not Load. Отладчик выводит.
Код: plaintext
1.
2.
3.
4.
"TestEXE.exe" (Win32). Загружено "C:\Users\YUBA\Documents\Visual Studio 2015\TestEXE\Debug\TestDLL.dll". Символы загружены.
"TestEXE.exe" (Win32). Выгружено "C:\Users\YUBA\Documents\Visual Studio 2015\TestEXE\Debug\TestDLL.dll"
"TestEXE.exe" (Win32). Загружено "C:\Windows\SysWOW64\kernel.appcore.dll". Невозможно найти или открыть PDB-файл.
Программа "[7612] TestEXE.exe" завершилась с кодом 0 (0x0).
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387786
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибку какую выдает?
Код: plaintext
1.
printf("DLL not load Error#%d\n", GetLastError());
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387804
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TОшибку какую выдает?
Код: plaintext
1.
printf("DLL not load Error#%d\n", GetLastError());

Пишет только - DLL not load Error. GetLastError() - как будто его и нет, молчит как партизан.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387808
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAПишет только - DLL not load Error. GetLastError() - как будто его и нет, молчит как партизан.

Ты %d забыл.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387814
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, точно забыл. #4250.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387818
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA#4250.
Точно?

https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms681381(v=vs.85).aspx ERROR_NOT_APPCONTAINER
4250 (0x109A)
This operation is only valid in the context of an app container.

Погуглил, эта ошибка с просмотром видео связана.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387822
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, я уже тоже нашел. Но если б я чего понял.)))
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387835
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ХЗ что у тебя происходит.
В архиве exe и dll собранные в Win32 debug. Потести где у тебя проблема, в exe или dll
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387897
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, прога работает. Твоя dll к моему EXE цепляется и в штатном режиме работает.ОК. В режиме отладки прогу выбивает в момент подключения твоей длл.
Моя DLL не цепляется к твоему ЕХЕ с ошибкой 125 -Unable to Connect to Headset, Error 125 , а сейчас ее стало выбивать в момент подключения твоей длл.
Но ситуация, в общем, сходная. При запуске ЕХЕ из папки цепляется и твоя и моя (старая). При запуске из отладки всех выбивает.
Моя, правда, не цепляется и при запуске из среды.
В моей ДЛЛ, понятно, ошибка, видимо VS на стадии создания проекта что-то туда пишет.
Но почему прогу выбивает в момент подключения твоей ДЛЛ при отладке?
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387945
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAВ режиме отладки прогу выбивает
Скриншот дай. У тебя там такая мистика что остается только предложить переустановить все начиная с виндовса.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387965
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, скриншот чего? Все, что она пишет я привел. Больше ничего там просто нет.
Все таки думаю на VS при создании шаблона проекта.
Сейчас делаю пошагово из - Пошаговое руководство. Создание и использование библиотеки DLL (C++) . Посмотрим, что это даст. Там, правда, через ссылку цепляется, потом поменяю.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39387981
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Смешно. Для того, чтобы все заработало надо:
1. При создании консольного приложения в параметрах снять птичку - Предкомпилированный заголовок.
2. При создании ДЛЛ надо создавать не из главного списка, а начинать создавать консольное приложение, и выставить в свойствах -
Библиотека ДЛЛ.
После этих манипуляций, ваша ДЛЛ стала запускаться в дебагере через LoadLibrary. А моя ДЛЛ нормально скомпилировалась и тоже стала нормально загружаться и через #pragma и через LoadLibrary. И все. Я балдею.

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39388013
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Да, большое спасибо за помощь. Без Вас копать пришлось бы значительно дольше и глубже.

Однако вопрос пока не закрыт, надо еще с экспортом из экзешников разобраться.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39388015
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,

Чудес нет, любая галочка и свойства проекта в студии однозначно транслируется в опцию командной строки.

Когда начнешь понимать их смысл, выкинь бубен
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39388018
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglYUBA,

Чудес нет, любая галочка и свойства проекта в студии однозначно транслируется в опцию командной строки.

Когда начнешь понимать их смысл, выкинь бубенА то я не знаю.)) Но бубен попридержу.)
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39388088
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBADima T,
Смешно. Для того, чтобы все заработало надо:
1. При создании консольного приложения в параметрах снять птичку - Предкомпилированный заголовок.
2. При создании ДЛЛ надо создавать не из главного списка, а начинать создавать консольное приложение, и выставить в свойствах -
Библиотека ДЛЛ.

Я выбираю нужный мне тип проекта и ставлю галку "Empty project", тогда просто создается пустой проект без всякого мусора из ненужных *.h
И отключаю юникод: в свойствах проекта поменять General - Charaster set = Not set

Как выше написали это можно после натыкать в свойствах проекта.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39388112
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBADima T,
Смешно. Для того, чтобы все заработало надо:


Очень смешно.
Чтобы всё заработало, надо ИДТИ УЧИТЬСЯ , а не пытаться сходу сделать в общем не самый простой по архитектуре
проект, в котором НА ЛЮБОМ шаге можно сделать кучу всего не так, как надо, если не понимаешь.
И можно после того, как сделал не так, придумать 20 неверных фантазий , не относящихся к реальности ну совсем никак,
а потом ещё 20 способов выйти из этого "эльфийского эдема с единорогами" в другой, ещё более сказочный мир.
Желаю тебе успехов в этом весёлом путешествии по иным мирам.
(а нужно было всего лишь сесть на недельку, и прочитать книжку)

YUBA1. При создании консольного приложения в параметрах снять птичку - Предкомпилированный заголовок.

вообще никак не на что не влияет, кроме скорости сборки проекта, которая у тебя и так будет очень быстрая.


YUBA2. При создании ДЛЛ надо создавать не из главного списка, а начинать создавать консольное приложение, и выставить в свойствах -
Библиотека ДЛЛ.

Ага, и как консольное приложение соотносится с .DLL? ЭТо два независимых вида проекта, одно и другое.


YUBAПосле этих манипуляций, ваша ДЛЛ стала запускаться в дебагере через LoadLibrary. А моя ДЛЛ нормально скомпилировалась и тоже стала нормально загружаться и через #pragma и через LoadLibrary.


Видимо, какими-то ужимками наш ТС таки включил в проекте отладочный режим, возможно, переключился на конфигурацию с отладочным режимом...

YUBAИ все. Я балдею.

Главное -- чтобы тебе нравилось!
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39388338
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, интересно, и какую книжку вы мне советуете почитать? Обычно в книгах по языкам на 3/4 объема излагается синтаксис и некие основы, а что-то действительно интересное и полезное из 600 стр. ну 20-40. Все. Книжек не напасессся.
Общаясь с VB и C# синтаксис С++ я конечно подзабыл, но это восполнимо по ходу пьесы.
Хотя, одну книжку, но хорошую надо иметь, для лучшего сна.
А что касаетсяMasterZivАга, и как консольное приложение соотносится с .DLL? ЭТо два независимых вида проекта, одно и другое. Дык, непосредственное отношение.
По шагам, для непонимающих.))
1. При создании проекта выбираем консольное приложение. Нажимаем Далее.
2. В открывшемся окне свойства ставим gтичку -Библиотека ДЛЛ.
Кстати, это рекомендации MS по созданию ДДЛ. См.MSDN.
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39388841
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA1. При создании проекта выбираем консольное приложение. Нажимаем Далее.
2. В открывшемся окне свойства ставим gтичку -Библиотека ДЛЛ.
Кстати, это рекомендации MS по созданию ДДЛ. См.MSDN.

я же говорю, бред какой-то...
...
Рейтинг: 0 / 0
C++ exe проект как DLL
    #39388879
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivя же говорю, бред какой-то... Все вопросы к MS - Пошаговое руководство. Создание и использование библиотеки DLL (C++)
...
Рейтинг: 0 / 0
58 сообщений из 58, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ exe проект как DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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