powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ exe проект как DLL
25 сообщений из 58, страница 2 из 3
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
25 сообщений из 58, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / C++ exe проект как DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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