Я сделал простой cll только с одной функцией (в VS 2017). Я использую эту функцию DLL из другой клиентской программы c. Является ли вызов асинхронным (в отдельном потоке, чем выполняемая клиентская программа)? Если нет, то мне нужно запустить асинхронно, а если функция dll - длительный процесс (или когда она хочет уведомить вызывающую программу о событии), мне нужен вызов из dll в функцию обратного вызова в вызывающей (клиентской) программе управлять событием (я полагаю, с помощью указателя на функцию).
Код DLL:
#include <stdio.h>
__declspec(dllexport) void DllFunction() {
for (long i = 1;i <= 300000;i++) {
printf("dll\n");
}
}
И клиентская программа c:
#include <stdio.h>
__declspec(dllimport) void DllFunction(void);
int main() {
DllFunction();
for (long i = 1;i <= 300000;i++) {
printf("client\n");
}
return 0;
}
Запуск предыдущего клиентского кода Я думаю, что не было никаких помех между двумя командами printf (dll и клиент)!
Обновлено
обо всем по порядку ... после поиска я понимаю, что мы можем отделить функцию обратного вызова от асинхронного вызова. У нас может быть функция обратного вызова, которая находится в коде вызова (клиента) и вызывается из длительного процесса dll, чтобы уведомить, например, о прогрессе, как очень хорошо описано в этой статье:
Использование обратных вызовов в DLL
так что остается второй проблемой асинхронности ... как насчет функции CreateThread (). Могу ли я использовать это? И если да, где должны быть использованы? В DLL или в коде клиента?