lib函数添加功能但是函数名和参数不变,重新封装成DLL有关问题

本文探讨了如何在不修改原有库源码的情况下,通过创建新的DLL来扩展或修改现有库的功能。介绍了如何动态调用原DLL中的函数,并讨论了.lib文件在编译过程中的作用及常见问题解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lib函数添加功能但是函数名和参数不变,重新封装成DLL问题
现在又别人封装好的lib、DLL和头文件,我没有其源码,要对这个库中某一个函数功能进行修改,其他函数功能和实现不变。然后我改后重新封装成DLL。
但是,我不知道工程怎么包含原库和调用原库。我现在的做法是包含原来的lib和头文件,在我的工程中用同样函数来调lib中的函数,但是这样不对,DLL没办法加载

------解决方案--------------------
你可以重新写一个DLL,在你的DLL中动态调用原来的函数,一个问题是,发布时既要你自己的DLL,又要原始的DLL 
------解决方案--------------------
.dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll还有其他的文件格式如.ocx等,所有的.dll文件都是可执行。 

.lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须: 
1 包含一个对应的头文件告知编译器lib文件里面的具体内容 
2 设置lib文件允许编译器去查找已经编译好的二进制代码 

如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用到什么dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress。事实上,我们可以在Visual C++ IDE中以二进制形式打开lib文件,大多情况下会看到ASCII码格式的C++函数或一些重载操作的函数名字。 

一般我们最主要的关于lib文件的麻烦就是出现unresolved symble  _some_function@1234"这类错误,这就是lib文件连接错误或者没有包含.c、.cpp文件到工程里,关键是如果在C++工程里用了C语言写的lib文件,就必需要这样包含: 
extern "C" 

#include "myheader.h" 

这是因为C语言写的lib文件没有C++所必须的名字破坏,C函数不能被重载,因此连接器会出错。 

------解决方案--------------------
2楼说的很精辟,学习了 
------解决方案--------------------
静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接 库。
你的想法是可以的,错误慢慢找。。
### 将MATLAB函数编译封装DLL的方法 #### 准备工作 为了使MATLAB函数能够被其他编程语言如C++调用,通常的做法是将其编译动态链接库(DLL)[^1]。这不仅简化了跨平台开发流程,还提高了程序执行效率。 #### 编译命令配置 利用`mcc`作为MATLAB内置的编译工具来创建共享库,该指令类似于GCC中的编译器选项-W lib:string link:lib用于指定输出形式以及连接方式[^2]。具体来说,在命令行输入如下格式: ```bash mcc -W 'lib:<output_name>,<language>' -T link:lib <source_file> ``` 这里`<output_name>`代表目标文件名;而`<language>`参数则决定了接口风格,默认情况下应设置为`c`或`cpp`以适应不同需求。 #### 设置项目属性与路径选择 当一切准备就绪之后,下一步便是通过图形界面设定项目的各项细节,包括但不限于选择希望打包进DLL内的功能模块,并确认最终产物的存放位置。一旦操作完毕,系统将会自动生成一系列辅助文档及二进制文件于选定目录下,其中特别需要注意的是名为`for_redistribution_files_only`的子文件夹内所含有的`.dll`才是真正的品,需妥善保管以便后续集至外部应用程序之中[^3]。 #### 添加必要的依赖项 值得注意的是,在实际应用过程中除了上述提到的核心组件外,往往还需要额外引入一些由MathWorks官方提供的支持包——即所谓的运行时环境(Runtime),这样才能确保宿主程序顺利加载并正常使用来自MATLAB的功能扩展[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值