Не могу понять где ошибка при явном связывании все время не может найти функцию из DLL с помощью GetProcAddress. код библиотки DLL
| Код | __declspec(dllexport) INT WINAPI NewStrLen(const TCHAR* Str); BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } INT WINAPI NewStrLen(const TCHAR* Str) { int count=0; while(*Str++) ++count; return count; }
|
Код Программы
| Код | typedef INT (WINAPI* PFN) (const TCHAR* Str); LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; static HINSTANCE hLibrary; static PFN pfnNewStrLen; static TCHAR Str[20]=_T("ABC"); switch (message) { case WM_CREATE: hLibrary = LoadLibrary(_T("UserString")); if (hLibrary) { pfnNewStrLen = (PFN)GetProcAddress(hLibrary,"NewStrLen"); if (pfnNewStrLen == NULL) { MessageBox(hWnd, _T("Функция NewStrLen не найдена"), _T("LoadLibrary"), MB_OK | MB_ICONQUESTION); DestroyWindow(hWnd); return 0; } } else { MessageBox(hWnd, _T("Библиотека не найдена"), _T("LoadLibrary"), MB_OK | MB_ICONQUESTION); DestroyWindow(hWnd); return 0; } break;
case WM_COMMAND: switch (LOWORD(wParam)) { case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); TextOut(hdc,10,10,Str,pfnNewStrLen(Str)); EndPaint(hWnd, &ps); break; case WM_DESTROY: FreeLibrary(hLibrary); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
|
|