windows开发编程错误记载——2018.4.20日

  1. error C2664: 'CreateMutexW' : cannot convert parameter 3 from 'LPCSTR' to 'LPCWSTR'

        解决办法:项目属性->Configuration Properties->General->ProjectDefaults->Character Set

                选择Use Multi-Byte Charater Set(多字节字符集);

    2. error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

    主要是命名空间的问题,使用extern "C"加在主函数前,即可解决 ;

“编译一段程序时,出现连接器错误:

error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

 

该程序大致如下:

 

VisualStudio 10.0

properies | general | character set : "Use Unicode Character Set"

properies | linker | system : "Console (SUBSYSTEM:CONSOLE)"

 

namespace mystock
{

const int .....;
const wchar_t* const .....;
class .......{};
class .......{};
.......

int _cdecl wmain(int argc, wchar_t* argv[])
{
    ......;
    ......;
}

} // namespace mystock

为什么?我的main函数看起来没错啊?

 

对于CRT在什么情况下会要求什么样的main函数,相信读者很清楚。可这次的问题从未遇到过。

 

干想了二十分钟,终于想起来了。或者说是蒙对了,其实心里仍然不很清楚。

我注意到了连接器想要的是“_main”,为什么有“_”?即使是向导生成的_tmain,在宏展开后也是main或者wmain啊?

 

自动加下划线,不是C编译器对cdecl的修饰规则吗?对了,难道是因为我把wmain放到一个namespace里,就怎么怎么着了?

 

那就咬牙试一试:

extern "C" int _cdecl wmain(int argc, wchar_t* argv[]){ ......

 

连接器错误消失。

 

如果读者你,恰好也遇到类似问题,希望这篇文章有所帮助。

如果你知道的更详细,请回复指导:

1,为什么main函数放到namespace里就必须要extern "C"了?

2,main不放到namespace里,但是在.cpp文件里,在编译器默认设置的情况下,难道就是extern "C"了?不应该啊。”



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值