关于利用DLL 进行进程间通信的有关问题
关于利用DLL 进行进程间通信的问题.
今天刚好想试试利用DLL来实现进程间的通信,说明了就是在DLL里面设置一个共享数据段,但却得不到想要的结果,想知道在哪一步出错了,请热心的同胞们指点.谢谢.
我的DLL是利用MFC向导生成的.头文件有如下定义:
#ifndef _DLLSHARED
#define _DLLCOM_ _declspec (dllexport)
#else
#define _DLLCOM_ extern "C " _declspec (dllexport)
#endif
#pragma data_seg( "Shared ")
char m_str[256] = _T( " ");
volatile bool bInCriticalSection = FALSE;
#pragma data_seg()
#pragma comment(linker, "/SECTION:Shared,RWS ")
CCriticalSection cs;
_DLLCOM_ LPSTR GetValueString();
_DLLCOM_ void SetValueString(LPCTSTR str);
然后在CPP里面有两个函数的实现:
_DLLCOM_ LPSTR GetValueString()
{
while(bInCriticalSection)
Sleep(10);
return m_str;
}
_DLLCOM_ void SetValueString(LPCTSTR str)
{
while(bInCriticalSection)
Sleep(10);
cs.Lock();
bInCriticalSection = TRUE;
strcpy(m_str,str);
bInCriticalSection = FALSE;
cs.Unlock();
}
然后生成两个对话框工程,两个工程都包含了该DLL的头文件,还有在DEBUG目录下,也有DLL和LIB文件,通过调试,其中一个进程利用SetValueString已经成功设置m_str变量,但另一个进程利用GetValueString函数却得到空的字符串,不知道为什么???请高手指点一下,在两个工程的DEBUG目录下都有DLL和LIB文件,难道这用的不是同一个DLL文件吗?如果不是,应该怎么样做?
------解决方案--------------------
...
volatile bool bInCriticalSection = TRUE; // 改成TRUE了
#pragma data_seg()
如果这样呢?
今天刚好想试试利用DLL来实现进程间的通信,说明了就是在DLL里面设置一个共享数据段,但却得不到想要的结果,想知道在哪一步出错了,请热心的同胞们指点.谢谢.
我的DLL是利用MFC向导生成的.头文件有如下定义:
#ifndef _DLLSHARED
#define _DLLCOM_ _declspec (dllexport)
#else
#define _DLLCOM_ extern "C " _declspec (dllexport)
#endif
#pragma data_seg( "Shared ")
char m_str[256] = _T( " ");
volatile bool bInCriticalSection = FALSE;
#pragma data_seg()
#pragma comment(linker, "/SECTION:Shared,RWS ")
CCriticalSection cs;
_DLLCOM_ LPSTR GetValueString();
_DLLCOM_ void SetValueString(LPCTSTR str);
然后在CPP里面有两个函数的实现:
_DLLCOM_ LPSTR GetValueString()
{
while(bInCriticalSection)
Sleep(10);
return m_str;
}
_DLLCOM_ void SetValueString(LPCTSTR str)
{
while(bInCriticalSection)
Sleep(10);
cs.Lock();
bInCriticalSection = TRUE;
strcpy(m_str,str);
bInCriticalSection = FALSE;
cs.Unlock();
}
然后生成两个对话框工程,两个工程都包含了该DLL的头文件,还有在DEBUG目录下,也有DLL和LIB文件,通过调试,其中一个进程利用SetValueString已经成功设置m_str变量,但另一个进程利用GetValueString函数却得到空的字符串,不知道为什么???请高手指点一下,在两个工程的DEBUG目录下都有DLL和LIB文件,难道这用的不是同一个DLL文件吗?如果不是,应该怎么样做?
------解决方案--------------------
...
volatile bool bInCriticalSection = TRUE; // 改成TRUE了
#pragma data_seg()
如果这样呢?