将常量char指针转换为LPCTSTR

时间:2015-04-07 18:09:37

标签: c++

我正在尝试将一些代码从Visual Studio项目移植到mingw。 编译器指出一个未定义的引用错误,其中假设第二个参数是wchar_t const*。我有_UNICODE和。{ 我的项目中定义了UNICODE

undefined reference to `CBaseVideoRenderer::CBaseVideoRenderer(_GUID const&, wchar_t const*, IUnknown*, long*)'

以下是我正在使用的代码

基类的构造函数是这个

  CBaseVideoRenderer(REFCLSID RenderClass,LPCTSTR pName, LPUNKNOWN pUnk,      
                        HRESULT *phr);  

这是在基类

中启动的方式
MemRenderer::MemRenderer(LPUNKNOWN ptr, HRESULT *hr, OutputBuffer *buffer)
    : CBaseVideoRenderer(__uuidof(CLSID_MemRenderer), NAME("MemRenderer"), ptr, hr)

现在我收到上述声明中的错误

  undefined reference to `CBaseVideoRenderer::CBaseVideoRenderer(_GUID const&, wchar_t const*, IUnknown*, long*)'

我的问题是我为什么会收到这个错误?我查了LPCTSTR,它似乎是一个常量的char指针所以我也尝试了这个

 MemRenderer::MemRenderer(LPUNKNOWN ptr, HRESULT *hr, OutputBuffer *buffer)
        : CBaseVideoRenderer(__uuidof(CLSID_MemRenderer), "MemRenderer", ptr, hr)

但是我收到了错误

error: no matching function for call to 'CBaseVideoRenderer::CBaseVideoRenderer(const GUID&, const char [12], IUnknown*&, HRESULT*&)'
    buffer(buffer)

有关如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:1)

LPCTSTR的定义取决于UTF-16 unicode是否作为默认字符类型启用。

这对litterals有影响:

    如果没有使用unicode,则可以使用
  • "xxx"
  • 如果使用unicode,则使用
  • L"xxx"

您可以找到有关要使用的类型的更多信息here