日期:2014-05-18  浏览次数:20684 次

单例调用dll问题
问题是这样的:
我有一个dll,这个dll要被asp调用。但是这个dll我想只让他实例化一次。因为实例化一次将会耗费大量的内存,
请问各位高手,我该怎么办啊?dll是用c#便也

------解决方案--------------------
那就不要导出该类,导出一个函数,从该函数能得到一个该类的实例指针,该指针存在DLL全局区中,在PROCESS_ATTACH里只NEW一次.

你可以在你的类中定义一个Mutex,在类的构造函数中创建这个Mutex对象,创建他的时候给他指定一个名称,如你可以在类的构造函数中这样写
myclass::myclass()
{
CString strClassName= "SingleInstance ";
// 判断是否有一名为 "SingleInstance "的mutex存在
m_hMutex = OpenMutex (MUTEX_ALL_ACCESS, FALSE, strClassName) ;
if (m_hMutex == NULL)
{
// m_hMutex不存在,表示没有其它实例在运行,创建一个m_hMutex
m_hMutex = CreateMutex (NULL, TRUE, strClassName) ;
}
else
{
// 如果m_hMutex存在,表示已经有一个实例在运行,
// 或者其它的程序创建了一个名为 "SingleInstance "的m_hMutex
::AfxMessageBox( "已经有一个实例在运行! ",MB_OK|MB_ICONEXCLAMATION);
// 结束程序
return FALSE;
}
}
m_hMutex:在你的类中定义这个句柄

希望对你有所帮助!


上面的是VC的

当然重要的是思路 而不是技术