如何实现从C客户端异步调用C DLL函数的复杂而详尽的操作流程?

2026-04-16 18:223阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计543个文字,预计阅读时间需要3分钟。

如何实现从C客户端异步调用C DLL函数的复杂而详尽的操作流程?

我仅用一个函数创建了一个简单的C++ DLL(在VS 2017中)。在另一个C++客户端程序中使用这个DLL函数。这个调用是异步的(在一个单独的线程中运行客户端程序)吗?如果没有,我是否需要执行异步操作?

我只用一个函数制作了一个简单的c dll(在VS 2017中).我在另一个c客户端程序中使用这个dll函数.调用是异步的(在一个单独的线程中运行调用客户端程序)?如果没有那么我需要运行异步,如果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长时间进程调用,以通知例如本文中非常好描述的进度:
Using callbacks in DLLs

所以它仍然是关于异步的第二个问题……那么CreateThread()函数呢.我可以用吗?如果是,必须使用哪里?在dll或客户端的代码中?

如何实现从C客户端异步调用C DLL函数的复杂而详尽的操作流程?

不,您可以将DLL调用视为普通函数调用.没有什么特别的事情发生,因为目标函数恰好存在于DLL中.

在实践中可能会有一个间接表或其他东西,所以可以有一个额外的跳转,但它仍然只是直接跳转到代码,就像你的程序中的任何其他函数调用一样.

如果你想要异步性,你必须自己构建它,并且在一个单独的任务/线程中运行一组函数并不是非常简单.

本文共计543个文字,预计阅读时间需要3分钟。

如何实现从C客户端异步调用C DLL函数的复杂而详尽的操作流程?

我仅用一个函数创建了一个简单的C++ DLL(在VS 2017中)。在另一个C++客户端程序中使用这个DLL函数。这个调用是异步的(在一个单独的线程中运行客户端程序)吗?如果没有,我是否需要执行异步操作?

我只用一个函数制作了一个简单的c dll(在VS 2017中).我在另一个c客户端程序中使用这个dll函数.调用是异步的(在一个单独的线程中运行调用客户端程序)?如果没有那么我需要运行异步,如果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长时间进程调用,以通知例如本文中非常好描述的进度:
Using callbacks in DLLs

所以它仍然是关于异步的第二个问题……那么CreateThread()函数呢.我可以用吗?如果是,必须使用哪里?在dll或客户端的代码中?

如何实现从C客户端异步调用C DLL函数的复杂而详尽的操作流程?

不,您可以将DLL调用视为普通函数调用.没有什么特别的事情发生,因为目标函数恰好存在于DLL中.

在实践中可能会有一个间接表或其他东西,所以可以有一个额外的跳转,但它仍然只是直接跳转到代码,就像你的程序中的任何其他函数调用一样.

如果你想要异步性,你必须自己构建它,并且在一个单独的任务/线程中运行一组函数并不是非常简单.