返回信息流为了实现语音翻译,从科大讯飞官网下载了语音翻译的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的时候,每次输出的都不一样,感觉是随意输出的。。。。。这是为什么??
这是一条镜像帖。来源:北邮人论坛 / cpp / #94349同步于 2017/1/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
小白求稳关于C语言生成dll的问题
upupup123
2017/1/8镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
【 在 chenxiansf 的大作中提到: 】
: 搞语言间调用还不如用socket
嗯 你说的也是一个办法,但是现在的主要问题是如何生成dll。。。生成了dll,调用倒是不复杂
【 在 nuanyangyang 的大作中提到: 】
: 以前没有学过C。。。。。还是先学C吧。另外,"生成dll"不是C语言的特性的一部分,它是操作系统、编译器相关的。
以前学过,是很久没有写过了。。我就是想问下上面的两个函数生成dll为什么会出错呢(用的是vs2015)。。我这个也是网上查到的写法,只是稍微改了下不知道为什么不对呢,谢谢暖神~
别这样,好好学学c吧。然后是学习链接器、装载器的工作方式。
python调c,也需要对c特别了解才行,尤其是内存管理,还有动态装载的事情。
要是不行的话,找对c和python比较熟悉的同事帮你生成一个dll,并用ctypes模块封装一下那个dll。
【 在 upupup123 的大作中提到: 】
: 以前学过,是很久没有写过了。。我就是想问下上面的两个函数生成dll为什么会出错呢(用的是vs2015)。。我这个也是网上查到的写法,只是稍微改了下不知道为什么不对呢,谢谢暖神~
要真想知道的话,给你一个路线:
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)。。我这个也是网上查到的写法,只是稍微改了下不知道为什么不对呢,谢谢暖神~