zoukankan      html  css  js  c++  java
  • 解决waveInOpen录音编译x64程序出错的问题

    1、之前也碰到过x86程序升级为x64程序,关键点是类型大小的使用。

    之前同事碰到过一个用int表示指针的程序,程序改为x64会出错,找原因找了半天。

    2、今天我也碰到了,使用aveInOpen录音,升级程序为x64时,因为自己使用API的不规范,

    在waveInOpen和MicCallback哪里,参数使用了DWORD来转换指针,一开始是win32的,后来要升级,程序升级到x64后,DWORD指针大小还是4Byte,运行出错

    MMRESULT mmr = waveInOpen(&hWaveIn, WAVE_MAPPER, &mywaveform,(DWORD)(MicCallback), DWORD(this), CALLBACK_FUNCTION);
    
    static DWORD CALLBACK MicCallback(HWAVEIN hWaveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2);

    正确做法:

    MMRESULT mmr = waveInOpen(&hWaveIn, WAVE_MAPPER, &mywaveform,(DWORD_PTR)(MicCallback),DWORD_PTR(this), CALLBACK_FUNCTION); 

    static DWORD CALLBACK MicCallback(HWAVEIN hWaveIn, UINT uMsg,DWORD_PTR dwInstance,DWORD_PTR dwParam1,DWORD_PTR dwParam2);

    其实waveInOpen和waveInProc的几个参数都是以DWORD_PTR为参数类型的,只是自己参考别人代码时,没有注意。

    这里就要提醒大家和提醒自己:参考别人的代码也需要按照开发规范来,禁止拿来就用,盲目使用的做法。

    void CALLBACK waveInProc(
       HWAVEIN   hwi,
       UINT      uMsg,
       DWORD_PTR dwInstance,
       DWORD_PTR dwParam1,
       DWORD_PTR dwParam2
    );
  • 相关阅读:
    函数、包和错误处理
    程序流程控制
    poj 2515 Birthday Cake
    poj 2094 多项式求和。
    hdu 3625 第一类striling 数
    hdu 4372 第一类stirling数的应用/。。。好题
    poj 1845 Sumdiv
    hdu 3641 Treasure Hunting 强大的二分
    poj 3335 /poj 3130/ poj 1474 半平面交 判断核是否存在 / poj1279 半平面交 求核的面积
    hdu 2841 Visible Trees
  • 原文地址:https://www.cnblogs.com/Forever-Kenlen-Ja/p/8572322.html
Copyright © 2011-2022 走看看