Шаг 38 - Проверяем пользовательскую ошибку

Мы явно вызовем DLL, как это было сделано в шаге "Шаг 41 - Явный вызов функций DLL". Создаем код для тестирования, не забываем, что нам нужно чтобы DLL была доступна.

#include "stdafx.h"
#include "windows.h"
#include "iostream.h"

typedef  VOID (WINAPI MESS)();


void main()
{
	HINSTANCE hModule=NULL;
	hModule=::LoadLibrary("DllExcel.dll");
	if (hModule!=NULL)
	{
		MESS* me=NULL;
		me=(MESS*)::GetProcAddress((HMODULE)hModule,"MyTest");
		if (me!=NULL)
		{
			(*me)();
			
			LPVOID lpMsgBuf;
			FormatMessage( 
				FORMAT_MESSAGE_ALLOCATE_BUFFER | 
				FORMAT_MESSAGE_FROM_HMODULE	,
				hModule, GetLastError(),
				MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
				(PTSTR) &lpMsgBuf, 0, NULL );
			cout << (char*)lpMsgBuf << endl;
		}
		else cout << "Error Load function" << endl;
	}
	else cout << "error load Dll" << endl;
	::FreeLibrary(hModule); 
}

Запускаем.

Появится предусмотренное функцией диалоговое окно, а дальше сообщение о нашей ошибке.

Обратить внимание нужно на то, что передается флаг получения описания ошибки из модуля FORMAT_MESSAGE_FROM_HMODULE. Так же ошибку можно увидеть в Error LookUp.

Но при условии, что Вы добавите в модуль название DLL.

Полный код в проекте.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 14.01.2003