1.error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [20]”转换为“LPCTSTR”解决办法: 出错内容: 1>c:/documents and settings/administrator/my documents/visual studio 2008/projects/sip_dlg/sip_dlg/sip_dlgDlg.h(52) : error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [20]”转换为“LPCTSTR” 1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换 解决方法: 修改: 项目-》属性-》配置属性-》常规-》字符节-》使用字符多字节字符节 2.VC++中播放声音wav最简单的方法——sndPlaySound 一个VC项目要增加播放wav功能,要求很低,能循环播放和停止就可以。 因为只需在Windows上执行,先想到用MCI接口。试了一下,用mciSendCommand可以实现基本的播放wav文件的功能。但循环播放wav就麻烦了,必须向窗口传送MM_MCINOTIFY消息。 google了一下,才发现原来有更简单的方法——用sndPlaySound。一条语句sndPlaySound(filename, SND_ASYNC | SND_LOOP)就可以循环播放声音文件,完全满足我的要求。简单吧。 函数定义是: BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound); 其中,lpszSound一般是wav文件的文件名,fuSound是参数。常见的fuSound参数有: SND_ASYNC 异步播放,即程序不等播放结束就继续执行,播放背景声。 SND_SYNC 同步播放,即播放结束才继续执行 SND_LOOP 循环播放 SND_NODEFAULT 如果找不到指定文件,保持安静。如不指定此参数,则播放系统默认警告音。如没有默认警告音,则为失败。 执行成功返回TRUE,失败返回FALSE。 要停止播放只需再执行一遍lpszSound参数为NULL的sndPlaySound函数。 要求: 程序要加入Mmsystem.h或Windows.h头文件,编译时链入Winmm.lib库。 限制: sndPlaySound只能播放wav文件。 wav文件在播放前将被装入内存,所以不能太大。 只能同时播放一个声音。后一个声音会关闭前一个声音。 函数PlaySound是sndPlaySound的增强版,支持更多声音类型和fuSound参数,并可以播放内存和资源中的声音。 本文来自http://jijian91.com 原文http://jijian91.com/blog20070823/sndplaysound-play-wav-vc.html 3.自定义调试输出函数: static void WINAPI DebugString(LPCSTR format, ...) { va_list arglist; char buffer[1024]; va_start (arglist,format); vsprintf(buffer, format, arglist); va_end (arglist); strcat(buffer, "/n"); OutputDebugString (buffer); } 4. mediastream2 音频传输实现函数: bool build_media(int local_port, const char *remote_ip, int remote_port, int payload, const char *fmtp, int jitter, bool ec, int bitrate) { if(payload != 0 && payload != 8) { /* 目前仅支持0,8 711ulaw,711alaw */ return false; } PayloadType *pt; profile = rtp_profile_clone_full(&av_profile); q = ortp_ev_queue_new(); pt = rtp_profile_get_payload(profile, payload); if (pt==NULL) { AfxMessageBox("codec error!"); return false; } if (fmtp != NULL) payload_type_set_send_fmtp(pt, fmtp); if (bitrate > 0) pt->normal_bitrate = bitrate; if (pt->type != PAYLOAD_VIDEO) { //((CListBox *)dlg_wnd->GetDlgItem(IDC_LIST1))->AddString("audio stream start!"); audio = audio_stream_start(profile, local_port, remote_ip, remote_port, payload, jitter, ec); if (audio) { session = audio->session; } else { AfxMessageBox("session error!"); return false; } } else { AfxMessageBox("codec select error!"); return false; } rtp_session_register_event_queue(session, q); return true; } 5.如何从DLL文件导出对应的LIB文件 http://blog.sina.com.cn/s/blog_591ac76c01000bce.html 在Visual C++环境中: 一、使用pexports或微软自带的dumpbin.exe导出dll的DEF文件: pexports dll-file > def-file dumpbin /EXPORTS dll-file > def-file 通过dumpbin产生的def文件,需要手工修改成符合DEF格式,如: LIBRARY MyNet.dll EXPORTS ??0IAccessContrl@@QAE@ABV0@@Z 推荐使用pexports,它产生的DEF文件不需要修改 二、使用vc自带的lib程序: lib /def:def-file /machine:i386 /out:lib-file MingW使用的.a文件 1.使用pexports或是微软自带的dumpbin导出dll的def文件,推荐使用pexports,可以直接导出不需要修改的def文件. 2.使用mingw自带的dlltool工具来生成.a文件 dlltool -D sample.dll -d sample.def -l sample.lib pexports的网址是:http://www.emmestech.com/software/cygwin/pexports-0.43/download_pexports.html