user-0 提问: const void*指针返回类型数据使用问题求解

回复:
user: user-1
content: 请问问题解决了，我也遇到了相同的问题，请教一下大神！谢谢！674186676@qq.com

user: user-0
content: 引用 10 楼 wanggui2015 的回复:http://bbs.elecfans.com/jishu_1133384_1_4.html  这个里面说用32位无符号整型替代void*  多谢大神，我研究一下，回复你，因为有个疑问，如果用32位无符号整型代替void*,那么应该返回的是数据的首地址吧，通过这个地址LabVIEW怎么获得真正的数据哪？

user: user-2
content: http://bbs.elecfans.com/jishu_1133384_1_4.html  这个里面说用32位无符号整型替代void*

user: user-2
content: 我还是觉得这种方法不科学的啊，你那个LabView针对返回指针类型肯定有其他解决方法的吧？

user: user-0
content: 引用 7 楼 wanggui2015 的回复:你写个生成dll的工程，里面函数这样写：   int MyQTTSAudioGet(void** ppAudioData, const char* sessionID, unsigned int* audioLen, int* synthStatus, int* errorCode) { 	*ppAudioData = QTTSAudioGet(sessionID, audioLen, synthStatus, errorCode); 	return *ppAudioData == NULL ? -1 : 0; }   然后把这些函数导出，生成一个dll不就行了么。  我先试试，不过一个*的void*的参数有没有办法？貌似两个*的LabVIEW也不支持

user: user-2
content: 你写个生成dll的工程，里面函数这样写：   int MyQTTSAudioGet(void** ppAudioData, const char* sessionID, unsigned int* audioLen, int* synthStatus, int* errorCode) { 	*ppAudioData = QTTSAudioGet(sessionID, audioLen, synthStatus, errorCode); 	return *ppAudioData == NULL ? -1 : 0; }   然后把这些函数导出，生成一个dll不就行了么。

user: user-0
content: 跪求大神回复

user: user-0
content: 引用 3 楼 wanggui2015 的回复:[quote=引用 2 楼 paranet 的回复:] 是讯飞的语音合成接口。大侠不用知道怎么使用LabVIEW，我只想知道在C中怎么调用标准接口函数，将返回值的const void*挪到参数列表  额，你是想把qtts这个库再封装一层接口，这个接口唯一的改变就是把返回值放到参数列表里是吧？  是的是的！

user: user-0
content: LabVIEW上支持的C函数返回值类型少的可怜

user: user-2
content: [quote=引用 2 楼 paranet 的回复:] 是讯飞的语音合成接口。大侠不用知道怎么使用LabVIEW，我只想知道在C中怎么调用标准接口函数，将返回值的const void*挪到参数列表  额，你是想把qtts这个库再封装一层接口，这个接口唯一的改变就是把返回值放到参数列表里是吧？

user: user-0
content: 是讯飞的语音合成接口。大侠不用知道怎么使用LabVIEW，我只想知道在C中怎么调用标准接口函数，将返回值的const void*挪到参数列表   引用 1 楼 wanggui2015 的回复:讯飞语音云合成接口啊，LabVIEW没用过没法帮你，不过如果有接口调用方面的问题可以找我。

user: user-2
content: 讯飞语音云合成接口啊，LabVIEW没用过没法帮你，不过如果有接口调用方面的问题可以找我。

user: user-0
content: 这个应用的目的是把大片的文字转化为语音，官方的例子语音数据是使用while循环成块生成，流盘到文件，依照大神的意思，我可以直接将范例程序打个dll包，LabVIEW中调用这个dll的同时，另一个线程直接检测文件大小有没有变化，有变化就读文件，对吗？ 这倒绝对是一个可行的办法

user: user-3
content: 无profiler不要谈效率！！尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代！  聊聊磁盘I/O那些事 http://www.sohu.com/a/148649739_683048

user: user-0
content: 引用 12 楼 zhao4zhong1 的回复:不要做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不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！ 谢大神赐教，但问题是通过文件的方式效率是不是变低了？

user: user-0
content: //		const void* data = QTTSAudioGet(sessionID, &audio_len, &synth_status, &ret); 		const char* data = (const char*)QTTSAudioGet(sessionID, &audio_len, &synth_status, &ret); 第一行是原来的代码，我用第二行代替后，在C中没有报错，而且得到的文件和原来的一模一样， 于是我做了下面的动态库 _declspec(dllexport) const char* QTTSAudioGet_LV(const char* sessionID, unsigned int* audio_len, int* synth_status, int* errorCode) { 	const char* pAudioData; 	pAudioData = (const char*)QTTSAudioGet(sessionID, audio_len, synth_status, errorCode); 	return pAudioData; }  LabVIEW给我返回了个空字符串，但是没有报错，只是数据没返回来，是不是因为没有给字符串分配内存？

user: user-3
content: 不要做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不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！