c生成dll文件

饺子必须死 2014-11-13 09:51:52
我现在只有.c文件,没有头文件,我想生成dll文件,以便python里面调用,求教怎么生成dll
...全文
248 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-11-14
  • 打赏
  • 举报
回复
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·……
zacharyLiu 2014-11-14
  • 打赏
  • 举报
回复
两种方法: 1.自己定义一个头文件,包含C文件函数; 2.定义一个.def文件,导出函数名
lm_whales 2014-11-13
  • 打赏
  • 举报
回复
C++写成 extern "C " _stdcall int fun_xxxx(int a){return 0;}; C写成 _stdcall int fun_xxxx(int a){return 0;}; 主要有原因是,Windows API 函数都不是 (_cdcel )C调用约定 而是 _stdcall 调用约定 所以 Windows 上的每种开发语言,几乎都支持这种调用约定生成的函数。 如果想再可靠些, 可以写成 WINAPI int fun_xxxx(int a){return 0;}; WINAPI 是 windows.h 中定义了的一个宏,代表 WINAPI 的调用约定。 生成DLL的几种方法: 1)命令行方式 ,可以直接命令行编译生成 .dll 这必须了解,编译的细节, 在这个时代只有那些愿意深入学习的人 才会用命令行方式编译 2) 修改编译选项,这个也必须有一个已经创建的工程,才能修改 3)在VC(VS)开发环境里,直接创建一个 .dll 工程,创建新的 .c,.cpp 或者添加现有的 .c 到 这个工程 这里,创建.dll 工程的时候,有几个选项,每个选项会产生一种类型的 dll。
lm_whales 2014-11-13
  • 打赏
  • 举报
回复
C 语言对函数名的改编很简单,往往只是在前面加一个 下划线 因为C语言没有函数重载,所以每个编译后的函数名和代码里的函数名非常一致。 C++ 有函数重载,做不到编译后的函数名和代码里的函数名一致 所以有一套比较复杂的名字改编规则,而且每个编译器做法不同 C++要想达到C的效果,往往 要 在函数前面,加 extern “C” 让编译器像C那样生成 函数名字。 linux 有 共享库 后缀是 .so 这是linux 系统的动态库 效果 等同于 DOS ,windows 上的.dll C语言的 DLL 有几种办法生成,最简单的是让 VC自动生成一个框架,然后把 .c 文件添加进去 而写def 对于生成 .dll 是最直接,最能够清晰控制生成的dll 中输出函数的方式 一般来说,写成 C++ extern "C " _stdcall int fun_xxxx(int a){return 0;}; 这种方式是不用担心 生成的函数,其它语言不能调用的 一般 .def 这么写就可以了 ;xxx.def Libray xxx EXPORTS fun_xxxx ;
饺子必须死 2014-11-13
  • 打赏
  • 举报
回复
引用 3 楼 lm_whales 的回复:
dll 和对应的头文件,没关系 提供头文件是为了更方便使用 dll .c 如果不包含 main ,可以很简单的生成 dll 单一 .c 如果没有引用其他文件定义的函数函数(包括库函数),不需要额外的头文件,就可以生成 dll 如果引用了别的文件定义的函数,则通常必须有对应的头文件 (可能还需要.lib .obj 文件) 。。。。。头文件内容,有时候,可以复制过来,这样就不用 包含头文件了, 不过通常都是包含头文件的,因为包含头文件更简单,更不容易出错。
可为什么我生成不了呢?还有,我想再问一个问题,就是我用c生成dll和用c++生成dll,对于python有什么不同(语法和传递函数),我在网上看的大都是c生成的,
lm_whales 2014-11-13
  • 打赏
  • 举报
回复
dll 和对应的头文件,没关系 提供头文件是为了更方便使用 dll .c 如果不包含 main ,可以很简单的生成 dll 单一 .c 如果没有引用其他文件定义的函数函数(包括库函数),不需要额外的头文件,就可以生成 dll 如果引用了别的文件定义的函数,则通常必须有对应的头文件 (可能还需要.lib .obj 文件) 。。。。。头文件内容,有时候,可以复制过来,这样就不用 包含头文件了, 不过通常都是包含头文件的,因为包含头文件更简单,更不容易出错。
饺子必须死 2014-11-13
  • 打赏
  • 举报
回复
引用 1 楼 layershow 的回复:
建一个 dll 的工程,把你的 c 文件放进去,定义函数导出,编译
我用vs试的,但是它需要头文件,我这个没有,只有.c
layershow 2014-11-13
  • 打赏
  • 举报
回复
建一个 dll 的工程,把你的 c 文件放进去,定义函数导出,编译

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧