void CALLBACK WaveInProc 出错 Access Violation

kawb1974 2011-01-06 04:29:55
如果在主Aplication中在MainForm前申明如
void CALLBACK WaveInProc(HWAVEIN waveOut, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
if( uMsg == MM_WIM_DATA )
{
MainForm->DoProcess();
}
}
在Form里
void __fastcall TMainForm::DoProcess()
{
bFlag=true; //bFlag 是在头文件中private的已申明变量
...
}
其他略
这样是是不会出错的

但如果我在主Aplication中调用ProcessForm 此ProcessForm如上相同代码就会报错Access Violation
也就是 运行的程序试图存取未被指定使用的存储区
比如:
我在主程序Form1用一Button来调用Form2 Form2中此代码就会出错
而我在Form1直接用代码不会出错


如何在Form2中运行而不会出错
...全文
145 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kawb1974 2011-01-06
  • 打赏
  • 举报
回复
问题补充
waveInProc(...)
是在Form前定义的

#pragma resource "*.dfm"

void CALLBACK waveInProc(HWAVEIN waveOut, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
if( uMsg == MM_WIM_DATA )
Form->DoProcess(); //如果分配内存就执行DoProcess进程
}
//---------------------------------------------------------------------------

__fastcall TForm::TForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

__fastcall TForm::DoProcess()
{
if(bFlag)
{
...
...
}
}
//---------------------------------------------------------------------------

如果这个CPP是主程序 运行是不会错的
如果这个CPP是主程序运行后的另一个窗口执行就会报错Access Violation

以上问题是移植<实时显示波形,支持双声道>遇到的
ccrun.com 2011-01-06
  • 打赏
  • 举报
回复
骚瑞,可能是我的理解能力下降了,我没有看懂你要表达什么.

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧