KerLaede, создание DLL зависит от используемого средства сборки.  У тебя, я подозреваю, продукты Borland -- для них я не знаю.
Загрузка DLL в Win32 (стандартный интерфейс MS Windows) осуществляется двумя способами.  В первом к файлам проекта добавляется загрузочная библиотека (import library).  Эта библиотека "знает" как подгружать DLL и вызывать функции из DLL.  Второй способ -- грузить DLL самостоятельно при работе программы.  Это делается функцией LoadLibrary.  После того, как библиотека загружена в адресное пространство процесса, нужно получить указатель на функции из DLL стандартной функцией GetProcAddress.
Таймер в Win32 можно создать при помощи функции CreateTimerQueueTimer.  Работает только на Win2000 и старше.  Этот таймер по истечении вызывает некоторую функцию.  Таймерное событие можно сделать, если в функцию передавать событие, а функция будет это событие взводить.
Вот пример: 
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <stdio.h>
VOID CALLBACK TimerRoutine(PVOID lpParam, BOOL TimerOrWaitFired)
{
    HANDLE ext_DoneEvent = *(HANDLE *)lpParam;
    printf("TimerRoutine: timer expired\n");
    SetEvent(ext_DoneEvent);
}
int main()
{
    HANDLE hTimerEvent;
    HANDLE hTimer = NULL;
    HANDLE hTimerQueue = NULL;
    hTimerEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
    
    if (!hTimerEvent)
    {
        printf("CreateEvent failed (%d)\n", GetLastError());
        return 1;
    }
    // Create the timer queue.
    hTimerQueue = CreateTimerQueue();
    if (!hTimerQueue)
    {
        printf("CreateTimerQueue failed (%d)\n", GetLastError());
        return 2;
    }
    // Set a timer to call the timer routine in 5 seconds.
    if (!CreateTimerQueueTimer(
        &hTimer, hTimerQueue, TimerRoutine, &hTimerEvent , 5000, 0, 0))
    {
        printf("CreateTimerQueueTimer failed (%d)\n", GetLastError());
        return 3;
    }
    // Do other useful work here 
    printf("Call timer routine in 5 seconds...\n");
    // Wait for the timer-queue thread to complete using an event 
    // object. The thread will signal the event at that time.
    if (WaitForSingleObject(hTimerEvent, INFINITE) != WAIT_OBJECT_0)
        printf("WaitForSingleObject failed (%d)\n", GetLastError());
    // Delete all timers in the timer queue.
    if (!DeleteTimerQueue(hTimerQueue))
        printf("DeleteTimerQueue failed (%d)\n", GetLastError());
    return 0;
}