BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved) { switch(reason) { case DLL_PROCESS_ATTACH: CreateThread(0, 0, &showDialog, (LPVOID)hInst, 0, 0); break; case DLL_THREAD_ATTACH: case DLL_PROCESS_DETACH: case DLL_THREAD_DETACH: break; } return true;; } DWORD WINAPI showDialog(LPVOID lpData) { return DialogBox((HINSTANCE)lpData, MAKEINTRESOURCE(IDD_DIALOG1), 0, WndProc); } BOOL CALLBACK WndProc(HWND hwnd, UINT uMessage, WPARAM wParam, LPARAM lParam) { switch (uMessage) { case WM_INITDIALOG: doSettings(); break; case WM_COMMAND: { switch(LOWORD(wParam)) { case IDC_BUTTON1: DialogBox(WHAT HERE, MAKEINTRESOURCE(IDD_DIALOG2), hwnd, SettingsDlgProc); <- what here since I can't do HINSTANCE hInst here. break; case IDC_CHECK1: if (IsDlgButtonChecked(hwnd, IDC_CHECK1) == BST_CHECKED) { SetTimer(hwnd, 1, 512, &BAutoLoot); } break; } break;