关于MFC Regular DLL 写的一个SOCKET通信 多线程的问题

scaleyuming 2006-02-13 11:09:55
我用MFC Regular DLL 写了一个DLL,在里面应用了多线程
UINT CSocketClient::ThreadStart(LPVOID pParm)
{
CCriticalSection threadcs;

threadcs.Lock();
CSocketThread socket;
if(!socket.Create())
return 1;
if(!socket.Connect("10.90.128.24",1500))
return 2;
socket.SendFun();
threadcs.Unlock();
return 0;


}

int CSocketClient::ThreadFun()
{
AfxBeginThread(ThreadStart,this);
return 0;

}
当我程序执行到(!socket.Create())变会出现异常(Unhandled exception in vb6.exe(socksend.dll)0xc0000005,Access violation) ,
void* CMapPtrToPtr::GetValueAt(void* key) const
// find value (or return NULL -- NULL values not different as a result)
{
if (m_pHashTable == NULL)
return NULL;

这个DLL是用在vb中
如果我把他换成USE MFC A Share DLL的话,就没什么问题了。不知道是什么原因
2、在线程中访问数据库为什么路径老是不对,不在线程中就可以了那
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Para.mdb","","",adModeUnknown);

谢谢大家
...全文
153 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kudeet 2006-02-14
  • 打赏
  • 举报
回复
1 CSocket只能在GUI线程中创建,MS的CSocket一般不是用来支持多线程的,因为MFC封的这个类使用了事件(窗口消息)这种I/O模型,并自己建了一个隐藏的窗口来收这些消息(类似于COM中的套间线程)。 建议放弃了CSocket,自己封了一个效果也许更好。如果在一个线程中创建socket,很容易发生Assert(m_hSockWnd != NULL)的问题。如果一定要用,可以参考
Message-Oriented TCP and Multithreaded Client/Server
http://support.microsoft.com/kb/192570/en-us

2 在每个线程里都进行com库的初始化
Kudeet 2006-02-14
  • 打赏
  • 举报
回复
先看看是不是下面文章里的原因
http://support.microsoft.com/kb/193101/en-us
striking 2006-02-13
  • 打赏
  • 举报
回复
2. DataSource=Para.mdb 用绝对路径
DentistryDoctor 2006-02-13
  • 打赏
  • 举报
回复
http://support.microsoft.com/kb/194300/en-us

AFX_MANAGE_STATE(AfxGetStaticModuleState());
CSocketThread socket;
if(!socket.Create())
return 1;

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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