读书人

exe与dll的参数传递?该如何解决

发布时间: 2012-02-21 16:26:23 作者: rapoo

exe与dll的参数传递?
我用dll导出一个类:

CArraySerial.h

#ifdef DLL_FILE
class _declspec(dllexport) CArraySerial //导出类CArraySerial
#else
class _declspec(dllimport) CArraySerial //导入类CArraySerial
#endif
{
public:
BOOL InitializeDevice( CWnd* pPortOwner, UINT portnr = 1, UINT baud = 9600, char parity = 'N ', UINT databits = 8, UINT stopsbits = 2 );
}


CSerialArray.cpp
BOOL CArraySerial::InitializeDevice( CWnd* pPortOwner,// the owner (CWnd) of the port (receives message)
UINT portnr,// portnumber (1..4)
UINT baud,// baudrate
char parity,// parity
UINT databits,// databits
UINT stopsbits// stopbits
)
{
HWND hTest = *pPortOwner;
CString strTemp;
strTemp.Format( "%d ", hTest );
AfxMessageBox( strTemp );

return TRUE;
}

exe文件中引用:

void CSerialMFCDEMODlg::OnConnect()
{
// TODO: Add your control notification handler code here
HWND hTest = *this;
CString strTemp2;
strTemp2.Format( "%d ", hTest );
AfxMessageBox( strTemp2 );

m_SerialDevice.InitializeDevice( this, m_unPort, m_unBaudRate, *( m_sParity.c_str() ), m_unDataBit );
}

结果dll中弹出的窗口指针和exe弹出的窗口指针值不一样,不知是什么原因,改如何解决,谢谢!!


[解决办法]
搞定了,原来指针是一样的,但是指针所指向的m_hWnd是不一样的。至于具体原因我不清楚。
解决方法:在传递CWnd*时,再加一个参数把m_hWnd也直接穿过来,而不是在dll中调用CWnd-> m_hWnd。

收分 ^_^

读书人网 >VC/MFC

热点推荐