powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / работа с DLL
20 сообщений из 20, страница 1 из 1
работа с DLL
    #39533689
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть код (приведен ниже).
к устройству подключается нормально. а при попытке отключиться, выдает ошибку в модуле DLL.

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
// загрузка DLL
void __fastcall TForm3::FormCreate(TObject *Sender)
{
	String Worda = "plcommpro.dll";
	wchar_t* plcommpro = Worda.w_str();
	//hDLL = LoadLibraryEx (plcommpro, 0, LOAD_WITH_ALTERED_SEARCH_PATH);
	hDLL = LoadLibrary(plcommpro);
	if (!hDLL) {
	  ShowMessage("Невозможно загрузить plcommpro.dll");
	  return;
	}
	}
//---------------------------------------------------------------------------
void __fastcall TForm3::FormClose(TObject *Sender, TCloseAction &Action)
{
	if (isConnect)
	{
		typedef int (__cdecl * EP)(void);
		EP ExecProc = (EP)GetProcAddress(hDLL, "Disconnect");
		int h = ExecProc();
	}
	FreeLibrary(hDLL);
}
//---------------------------------------------------------------------------
// подключение
void __fastcall TForm3::Button1Click(TObject *Sender)
{
	typedef int (__cdecl * Connectos)(const char *param);
	Connectos Connect = (Connectos)GetProcAddress(hDLL, "Connect");
	//String W = "protocol=TCP,ipaddress=" +Edit1->Text+ ",port=4370,timeout=2000,passwd=";
	//wchar_t* ytt = W.w_str();
	const char *Parameters = "protocol=TCP,ipaddress=192.168.5.49,port=4370,timeout=2000,passwd="; // 192.168.5.48
	int h = Connect(Parameters);
	if (h != 0)
	{
		StaticText1->Caption = "Подключено";
		isConnect = true;
		Edit1->Enabled = false;
	}
	else
	{
		StaticText1->Caption = "неПодключено";
		isConnect = false;
		Edit1->Enabled = true;
	}
}
//---------------------------------------------------------------------------
// отключение
void __fastcall TForm3::Button2Click(TObject *Sender)
{
	if (isConnect)
	{
		typedef int (__cdecl * EP)(void);
		EP ExecProc = (EP)GetProcAddress(hDLL, "Disconnect");
		int y = ExecProc();
		StaticText1->Caption = "неПодключено";
		isConnect = false;
		Edit1->Enabled = true;
	}
}
//---------------------------------------------------------------------------
...
Рейтинг: 0 / 0
работа с DLL
    #39533745
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73, в каком месте падает? Возможно, ещё какой-то код выполняется из DLL, а уже произошла выгрузка её из памяти.
...
Рейтинг: 0 / 0
работа с DLL
    #39533922
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbMizer73, в каком месте падает?Какая разница? Ошибка-то с пустым текстом. А раз она еще и в "модуле DLL", т.е. в неизвестно какой, безымянной... Решить проблему не удастся все равно. Тут неповезло просто, бывает.
...
Рейтинг: 0 / 0
работа с DLL
    #39533938
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
		EP ExecProc = (EP)GetProcAddress(hDLL, "Disconnect");
		int h = ExecProc();


GetProcAddress может вернуть NULL, по-хорошему сначала проверить надо, затем вызывать.
...
Рейтинг: 0 / 0
работа с DLL
    #39535021
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

как проверить?
...
Рейтинг: 0 / 0
работа с DLL
    #39535023
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73Dima T,

как проверить?
Сам не догадался?
Как-то так
Код: plaintext
1.
2.
3.
4.
5.
		EP ExecProc = (EP)GetProcAddress(hDLL, "Disconnect");
		if(ExecProc != NULL) {
			int h = ExecProc();
			...
		}
...
Рейтинг: 0 / 0
работа с DLL
    #39535026
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

а что это даст? Я проверяю это через состояние соединено или не соединено.
и если соединено, то пытаюсь отключиться. и конец.
...
Рейтинг: 0 / 0
работа с DLL
    #39535028
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73а что это даст?
прога не упадет, если там NULL
...
Рейтинг: 0 / 0
работа с DLL
    #39535031
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[Function]
Void Disconnect(HANDLE handle)
[Objective]
The function is used to disconnect the device.
[Parameter description]
handle
[in]: The handle that is returned when the connection is successful.
[Returned value]
None
...
Рейтинг: 0 / 0
работа с DLL
    #39535033
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73[Function]
Void Disconnect( HANDLE handle )
[Objective]
The function is used to disconnect the device.
[Parameter description]
handle
[in]: The handle that is returned when the connection is successful.
[Returned value]
None

как этот HANDLE получить?
...
Рейтинг: 0 / 0
работа с DLL
    #39535039
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73как этот HANDLE получить?

Помедитировать над "The handle that is returned when the connection is successful."
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
работа с DLL
    #39535048
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovMizer73как этот HANDLE получить?

Помедитировать над "The handle that is returned when the connection is successful."


неченм медетировать )))

передел по совету народа подключение

Код: plaintext
1.
2.
3.
4.
5.
typedef int (__stdcall *Connectos)(const char* param);
	Connectos Connect = (Connectos)GetProcAddress(hDLL, "Connect");
	const char *param = "protocol=TCP,ipaddress=192.168.5.49,port=4370,timeout=2000,passwd=";
	int h = Connect(param);
	if (h != 0)
...
Рейтинг: 0 / 0
работа с DLL
    #39535052
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, подскажите, как правильно сделать дисконект


Код: plaintext
1.
2.
3.
typedef void (__stdcall *DisConnectos)(??????);
DisConnectos ExecProc = (DisConnectos)GetProcAddress(hDLL, "Disconnect");
ExecProc(??????);
...
Рейтинг: 0 / 0
работа с DLL
    #39535112
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Феерично!
...
Рейтинг: 0 / 0
работа с DLL
    #39535139
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73Народ, подскажите, как правильно сделать дисконект


Код: plaintext
1.
2.
3.
typedef void (__stdcall *DisConnectos)(??????);
DisConnectos ExecProc = (DisConnectos)GetProcAddress(hDLL, "Disconnect");
ExecProc(??????);



Можешь дать ссылку на документацию, где описана эта функция Disconnect?
...
Рейтинг: 0 / 0
работа с DLL
    #39535140
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73Народ, подскажите, как правильно сделать дисконект


Код: plaintext
1.
2.
3.
typedef void (__stdcall *DisConnectos)(??????);
DisConnectos ExecProc = (DisConnectos)GetProcAddress(hDLL, "Disconnect");
ExecProc(??????);


Код: plaintext
1.
2.
3.
typedef void (__stdcall *DisConnectos)(int);
DisConnectos ExecProc = (DisConnectos)GetProcAddress(hDLL, "Disconnect");
ExecProc(h из Connect());
...
Рейтинг: 0 / 0
работа с DLL
    #39535149
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Код: plaintext
1.
ExecProc(h из Connect());

Ну что ты. Он ведь поймет буквально и будет спрашивать тут, почему undeclared identifier из.
...
Рейтинг: 0 / 0
работа с DLL
    #39535575
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TMizer73Народ, подскажите, как правильно сделать дисконект


Код: plaintext
1.
2.
3.
typedef void (__stdcall *DisConnectos)(??????);
DisConnectos ExecProc = (DisConnectos)GetProcAddress(hDLL, "Disconnect");
ExecProc(??????);


Код: plaintext
1.
2.
3.
typedef void (__stdcall *DisConnectos)(int);
DisConnectos ExecProc = (DisConnectos)GetProcAddress(hDLL, "Disconnect");
ExecProc(h из Connect());




Спасибо огромное, заработало.
...
Рейтинг: 0 / 0
работа с DLL
    #39535757
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73,

О боже.. Ты 4 месяца делаешь это... =_= Ну как, прорыв есть?
...
Рейтинг: 0 / 0
работа с DLL
    #39535827
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НяшикMizer73,

О боже.. Ты 4 месяца делаешь это... =_= Ну как, прорыв есть? Ну сказал же, что заработало вчера)
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / работа с DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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