BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #94349同步于 2017/1/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

小白求稳关于C语言生成dll的问题

upupup123
2017/1/8镜像同步8 回复
为了实现语音翻译,从科大讯飞官网下载了语音翻译的SDK,是由C语言写的,但是项目主要是由python开发的,于是只能是将SDK生成dll,然后提供给python来调用,问题来了。。。。以前没有写过C,网上查了下实现dll的方法,现在只能将一个简单的函数生成dll,当涉及到函数调用的时候,就不行了,但是科大讯飞的SDK涉及到很多很复杂的函数调用,先定一个小目标!!!如何实现一个函数调用另一个函数生成dll,求大神们帮我看看这样写哪里出了问题 dllTest.cpp #include "stdafx.h" #include "dllTest.h" DLLTEST_API int Test1() { return 123456; } DLLTEST_API int Test2() { return Test1(); } 当调用Test1的时候,输出是123456,但是调用Test2的时候,每次输出的都不一样,感觉是随意输出的。。。。。这是为什么??
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
chenxiansf机器人#1 · 2017/1/8
搞语言间调用还不如用socket
upupup123机器人#2 · 2017/1/8
【 在 chenxiansf 的大作中提到: 】 : 搞语言间调用还不如用socket 嗯 你说的也是一个办法,但是现在的主要问题是如何生成dll。。。生成了dll,调用倒是不复杂
nuanyangyang机器人#3 · 2017/1/9
以前没有学过C。。。。。还是先学C吧。另外,"生成dll"不是C语言的特性的一部分,它是操作系统、编译器相关的。
upupup123机器人#4 · 2017/1/9
【 在 nuanyangyang 的大作中提到: 】 : 以前没有学过C。。。。。还是先学C吧。另外,"生成dll"不是C语言的特性的一部分,它是操作系统、编译器相关的。 以前学过,是很久没有写过了。。我就是想问下上面的两个函数生成dll为什么会出错呢(用的是vs2015)。。我这个也是网上查到的写法,只是稍微改了下不知道为什么不对呢,谢谢暖神~
nuanyangyang机器人#5 · 2017/1/9
别这样,好好学学c吧。然后是学习链接器、装载器的工作方式。 python调c,也需要对c特别了解才行,尤其是内存管理,还有动态装载的事情。 要是不行的话,找对c和python比较熟悉的同事帮你生成一个dll,并用ctypes模块封装一下那个dll。 【 在 upupup123 的大作中提到: 】 : 以前学过,是很久没有写过了。。我就是想问下上面的两个函数生成dll为什么会出错呢(用的是vs2015)。。我这个也是网上查到的写法,只是稍微改了下不知道为什么不对呢,谢谢暖神~
nuanyangyang机器人#6 · 2017/1/9
要真想知道的话,给你一个路线: 1. dll(还有unix的shared object(so))是为什么目的而产生的? 2. dll(还有so)里的符号(symbol)是什么概念? 3. windows的dll里,怎么确定一个symbol是否能从dll外部访问(私有、公有)?对应的C语言的写法(确切地说是微软vc的写法)是什么呢?dllexport和dllimport是怎么回事? 4. calling convention是什么?cdecl和stdcall是怎么回事? 5. C++的name mangling是怎么回事?为什么会有这个东西? 6. 用你的编译器(比如cl.exe),如何生成dll?请先看看命令行用法,而不是ide。 然后是使用: 1. 如何根据一个symbol的名字(以字符串的形式表示,如"EnumWindows")来从一个dll里查询这个symbol(比如EnumWindows函数)的地址呢? 2. Python的ctypes模块如何装载dll?如何找到dll里的某个函数?如何设置这个函数的参数和返回值类型?在你的平台上,int和void*类型的大小一样吗? 【 在 upupup123 的大作中提到: 】 : 以前学过,是很久没有写过了。。我就是想问下上面的两个函数生成dll为什么会出错呢(用的是vs2015)。。我这个也是网上查到的写法,只是稍微改了下不知道为什么不对呢,谢谢暖神~
upupup123机器人#7 · 2017/1/9
感谢暖神,既然这样我就踏实的学习下C还有你的路线吧! 发自「贵邮」
a206206机器人#8 · 2017/1/11
lz放弃吧。。我学了这么久C都学不明白。。