加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – C运行时对象,dll边界

发布时间:2020-12-14 02:25:40 所属栏目:Windows 来源:网络整理
导读:为dll设计C API的最佳方法是什么,它处理传递依赖于C运行时的“对象”的问题(FILE *,malloc返回的指针等).例如,如果两个dll与运行时的不同版本链接,我的理解是您无法安全地将FILE *从一个dll传递到另一个dll. 唯一的解决方案是使用依赖于Windows的API(保证在d
为dll设计C API的最佳方法是什么,它处理传递依赖于C运行时的“对象”的问题(FILE *,malloc返回的指针等).例如,如果两个dll与运行时的不同版本链接,我的理解是您无法安全地将FILE *从一个dll传递到另一个dll.

唯一的解决方案是使用依赖于Windows的API(保证在dll中工作)? C API已经存在并且已经成熟,但是主要是使用unix POV设计的(当然还是必须使用unix).

解决方法

你问了C,而不是C解决方案.

在C中执行此类操作的常用方法是:

>设计模块API以简单地不需要CRT对象.获取在原始C类型中传递的东西 – 即让消费者加载文件并简单地传递指针.或者,让消费者在内部传递一个完全限定的文件名,即打开,读取和关闭的文件名.
>其他c模块使用的方法,MS机柜SD和OpenSSL库的部件iirc浮现在脑海中,让消费应用程序将函数指针传递给初始化函数.所以,你在初始化过程中传递FILE *的任何API都会指向一个结构,其中的函数指针与fread,fopen等的签名相匹配.当处理外部FILE *时,dll总是使用传入的功能而不是CRT功能.

通过这样一些简单的技巧,您可以使您的C DLL接口完全独立于主机CRT – 或者实际上要求主机完全用C或C编写.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读