mciSendCommand函数每次都调用失败
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mciSendCommand函数每次都调用失败相关的知识,希望对你有一定的参考价值。
本来是要用c语言编写一个控制台应用程序下的MP3播放器。用的是mci。环境是vs2010。
可是每次调用mciSendCommand都调用失败,返回值为263。用mciGetErrorString()查看错误信息全是乱码。
如下是出问题的代码
MCI_OPEN_PARMS mciOpen;
MCIERROR mciError;
mciOpen.lpstrDeviceType =(LPCWSTR)"mpegvideo";
mciOpen.lpstrElementName =(LPWSTR) "d:\\a.mp3";
mciError = mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,(DWORD)&mciOpen);
if(mciError)
mciGetErrorString(mciError,(LPWSTR)buf,128);
printf("send MCI_OPEN command failed:%s\n",buf);
return;
声明的头文件有
#include "stdafx.h"
#include<Windows.h>
#include<MMSystem.h>
#include <Digitalv.h>
#include <vfw.h>
#pragma comment(lib,"vfw32.lib")
#pragma comment(lib,"Winmm.lib")
跪求大神,跪求大神,跪求大神
暂时找到原因了,由于在vs2010下,不能给mciOpen的成员直接赋予字符串。于是我再在下面的代码中,我把字符串强制转换了。结果导致了最终无法运行。
mciOpen.lpstrDeviceType =(LPCWSTR)"mpegvideo";
mciOpen.lpstrElementName =(LPWSTR) "d:\\a.mp3";
之后改变为TEXT,如下所示,便可以正常运行了。
mciOpen.lpstrDeviceType =TEXT("mpegvideo");
mciOpen.lpstrElementName =TEXT( "d:\\a.mp3");
这是为什么,为什么会有这样的结果。TEXT到底是什么?
还有如果我之后赋值的不是字符串,是字符指针,又有什么办法解决。
字符指针的类型不用 char* 和 const char*,换成 TCHAR* 和 const TCHAR* 就可以了。 参考技术A 这个是使用字符集的问题,如果不想使用TEXT宏的话,把工程属性里面设置字符集为《使用多字节字符集》,有关字符集的问题,可以从网上查找《windows程序设计》这本书,里面应该介绍的还算详细
React:每次渲染都会调用 onClick 处理程序?
【中文标题】React:每次渲染都会调用 onClick 处理程序?【英文标题】:React: onClick handler is getting called on every render? 【发布时间】:2017-05-31 23:57:54 【问题描述】:我在学习React,跟着this tutorial做了一个简单的井字游戏,你可以view here in CodePen.
我对箭头函数在 Square 组件的 onClick
属性中的工作方式感到困惑,该属性在 Board 组件的 renderSquare
函数内部返回:onClick=() => this.props.onClick(i)
。同样也是我拥有onClick= (i) => this.handleClick(i)
的游戏组件。我以为我可以在没有箭头函数的情况下编写它(就像onClick=this.handleClick(i)
),但这会破坏游戏。
【问题讨论】:
粗略解释:onClick
采用在事件触发时执行的函数。当() => this.foobar(blah)
完成时,创建一个箭头函数,它使用参数blah
执行foobar
。你不能做this.foobar(blah)
的原因是因为它会执行函数并传递返回值。 onClick
需要一个函数执行,而不是一个值。
看到这个:***.com/questions/29810914/…
您可能还想阅读facebook.github.io/react/docs/handling-events.html
【参考方案1】:
onClick
需要一个函数。箭头函数没有自己的this
;使用封闭执行上下文的this
值。
箭头函数是以下的替代品
onClick=this.handleClick.bind(this,i)
当你运行它时它不起作用
onClick=this.handleClick(i)
因为在这种情况下,它将调用一个函数,并且该函数将传递一个返回值,该返回值将在每次调用 render 时进行评估。因此,如果您在 onClick 函数中执行导致重新渲染的操作,例如 setState
,您的应用程序将陷入无限循环。因此onClick
需要一个函数而不是一个值,所以除非你从onClick
处理程序返回一个函数,否则你不应该直接调用它。
上面的箭头函数起到了将参数绑定到函数的作用
【讨论】:
我认为如果不知道handleClick
里面是什么,就无法得出这个结论,它还不如给你一个新的函数回调作为一个值。当然它适合这个问题,但它真的取决于handleClick
函数在做什么
@Icepickle,是的,你是对的,这是我的一个旧答案,没有那个解释,我正在编辑它,提供更多细节。以上是关于mciSendCommand函数每次都调用失败的主要内容,如果未能解决你的问题,请参考以下文章
如何用mciSendCommand()/mciSendString() 函数指定声卡播放音乐