我目前正在将一些代码从Visual Studio移植到Mingw.This代码来自一个开源库。我遇到了这个构造函数,其中一个TCHAR *被传递给LPCSTR。我只是使用基本的Cstyle转换来转换在Visual Studio中,我不需要强制转换,应用程序构建正常。但是如果我没有放置演员,我会在Mingw GCC中收到链接器错误。
这是建筑师
CAsyncReader::CAsyncReader(
TCHAR *pName,
LPUNKNOWN pUnk,
CAsyncStream *pStream,
HRESULT *phr)
: CBaseFilter(
LPCSTR(pName), // Is this cast ok ?
pUnk,
&m_csFilter,
CLSID_AsyncSample,
NULL
),
m_OutputPin(
phr,
this,
&m_Io,
&m_csFilter),
m_Io(pStream)
{
}
这是父类CBaseFilter
的构造函数 CBaseFilter(
__in_opt LPCTSTR pName, // Object description
__in_opt LPUNKNOWN pUnk, // IUnknown of delegating object
__in CCritSec *pLock, // Object who maintains lock
REFCLSID clsid, // The clsid to be used to serialize this filter
__inout HRESULT *phr); // General OLE return code
}
如果有效,请告诉我。
更新
由于应用程序在VS中构建得很好,并且在Mingw GCC中给我一个链接器错误,我的问题是我的GCC项目中是否有任何标志,或者VS是否隐含地执行此操作?这两个项目都启用了UNICODE,所以我完全混淆了链接器错误。这是我在Mingw GCC中遇到的链接器错误,并且与演员一起离开(现在我肯定从评论中判断为非常错误)。
undefined reference to `CBaseFilter::CBaseFilter(wchar_t const*, IUnknown*, CCritSec*, _GUID const&, long*)'
collect2.exe: error: ld returned 1 exit status