Возможно все, если четко сформулировать задачу.
Если ты хочешь в Блиц послать только 20 элементов, то кто тебе мешает сделать это следующим образом:
[highlight=blitzbasic]
CallDllFunction() ;в этот момент происходит работа дллки с БД
...
while DllResult()
var.TList = New TList
DLLFunction(var)
wend
[/highlight]
Суть в том, что дллка подготавливает всю необходимую информацию. Допустим в результате вызова CallDllFunction() произошло считывание из БД, выборка результатов и занесение их в массив определенного пользователем типа.
Необходимо создать переменную, которая будет подсчитывать количество найденных элементов, отвечающих заданному требованию. В конце обработки в это переменной будет хранится число 20.
[highlight=cpp]
int result_num=0;
[/highlight]
Функция DllResult() возвращает значение result_num.
[highlight=cpp]
int DllResult() { return result_num; }
[/highlight]
А сама DLLFunction работает с текущим элементом.
void DLLFunction(list* var)
{
result_num--;
var->a = data[result_num]->a;
var->b = data[result_num]->b;
//...
}
Разумеется в описанном тобой случае нужно работать с динамической памятью. Я описал лишь возможный принцип действия.