none
wm上使用madxlib(libmad编译成dll) RRS feed

  • 问题

  •       我需要在wm上流式解码MP3,经过查阅资料我决定采用libmad(似乎也就那么一种方案还能找到点资料),已经有大牛移植了,我用c#开发程序(初学,有点c#基础,但是c++基本不会),索性发现了madxlib项目(这个项目将libmad编译成dll,并且有c#调用的例子项目地址:http://www.codeproject.com/KB/audio-video/madxlib.aspx)。这个项目本来是win32上的,我在台式机上使用没发现问题。

          用vs2008将他在wm上重新编译了下(其中还需要libmad的wm版,我用的是http://blog.chinaunix.net/u/26691/showart_438320.html
    ,有一个错误说没有 <errno.h>,搜了下,发现可以用<winbase.h>代替。——主要用到了里面错误处理方面的东西,改完后就编译成功了)。

    但是把该dll文件放到wm上使用时出现如下错误

    异常代码:0xc0000005
    异常地址:0x0119d3e0
    读取:0x00170000
    出错模块:madxdllwm.dll(我编译的madxlib)
    便宜:0x0000d3e0

    位于form1.madx_read(intptr in_buffer,intptr out_buffer,intptr mx_house,madx_stat$ mxstat)  (这个是条用madxlib里的一个函数)
    位于form1.button1_click(object sender,eventargs e)
    位于control.onclick(eventargs e)
    位于button.onclick(eventargs e)
    .......

    有时候是coredll.dll出错,异常代码一样

    希望有人能给出改进意见,当然如果有老师有时间能帮忙变一下这个dll就更好了(我有点偷懒,但是我在libmad上花了好几天功夫了,今天又搞这个dll半天)
    如果还不能解决我想我只能改用c++来写了(我其实尝试了下,但是发现使用libmad对我这种初学者很有挑战。。)

    最后再次感谢大家。
    2010年2月4日 7:27

答案

  • 你好,cadmuxe:
          你说的问题我也是从未涉足过,不过从你的异常描述来看,是方法传递的一个参数发生了异常。我看到你的form1.madx_read(intptr in_buffer,intptr out_buffer,intptr mx_house,madx_stat$ mxstat) 方法中使用了Intptr类型,我估计这个出问题的可能性较大。
          编译能通过说明程序代码没有错误,按照上面的异常来看,比如啊,你的in_buffer也是一个IntPtr类型,并被声明为IntPtr,在c++中,这就是“只为变量声明了一个指针,但是没有为它分配内存地址,当程序(方法)调用它时,就发生溢出错误。”
          这里有一篇文章说了一个类似的问题及解决方法,希望对你有用:点击查看
         
    • 已编辑 Jack_Fan 2010年2月6日 1:07 修改超链接地址
    • 已标记为答案 cadmuxe 2010年2月6日 3:31
    2010年2月6日 1:06

全部回复

  • 你好,cadmuxe:
          你说的问题我也是从未涉足过,不过从你的异常描述来看,是方法传递的一个参数发生了异常。我看到你的form1.madx_read(intptr in_buffer,intptr out_buffer,intptr mx_house,madx_stat$ mxstat) 方法中使用了Intptr类型,我估计这个出问题的可能性较大。
          编译能通过说明程序代码没有错误,按照上面的异常来看,比如啊,你的in_buffer也是一个IntPtr类型,并被声明为IntPtr,在c++中,这就是“只为变量声明了一个指针,但是没有为它分配内存地址,当程序(方法)调用它时,就发生溢出错误。”
          这里有一篇文章说了一个类似的问题及解决方法,希望对你有用:点击查看
         
    • 已编辑 Jack_Fan 2010年2月6日 1:07 修改超链接地址
    • 已标记为答案 cadmuxe 2010年2月6日 3:31
    2010年2月6日 1:06
  • 多谢您的热心帮助,我会仔细检查一下我的代码的。
    2010年2月6日 3:31