error C2712: 无法在要求对象展开的函数中使用 __try
VC2008创建的扩展DLL工程,在函数
int Usb_Read(BYTE * buf,int len,int endpoint)
{
__try{
int aa=0;
int ii=5/aa;
}__except(1){
}
//以下是函数的功能代码
······
bool bTimeout;
int iResult;
int iMaxTime;
CString str;
······
TRACE0("···");
······
WaitForSingleObject(hEvent, INFINITE);
······
SetEvent(hEvent);
······
MessageBox(···);
······
}
编译后
c:\mydir\vceegusb\vceegusb\dllmain.cpp(618) : error C2712: 无法在要求对象展开的函数中使用 __try
请高手指点,万分感激!
[解决办法]
正如错误内容描述那样,你不能使用 CString str;这种形式。
我试过,可能不全,但函数接受一个对象指针参数,然后使用该指针
这样,就可以使用 __try 了
所以你换一个方式吧……
[解决办法]
可能的解决方案:
将要求 SEH 的代码移动到另一个函数中
重写使用 SEH 的函数以避免使用具有析构函数的局部变量和参数。在构造函数或析构函数中不要使用 SEH
不使用 /EHsc 进行编译
[解决办法]
因为 __try 和 析构 是鱼和熊掌,所以只能选择一个。