ASSERT(AfxGetThread() == NULL);

 现象:

ASSERT(AfxGetThread() == NULL);

 找到源码位置:

ASSERT(AfxGetThread() == NULL);

 感觉是线程之类的的东西没有初始化,查了一些资料说缺少_USRDLL宏,问题解决了,但不知道为什么。

ASSERT(AfxGetThread() == NULL);

先参考这个宏是干什么的:_USRDLL _AFXDLL _WINDLL 三种dll编译宏的具体含义

接下来发现没有加_USRDLL宏是不会执行CWinApp::InitInstance();这一句。

ASSERT(AfxGetThread() == NULL);

综上:(1)结论就是Windows里的编程需要一系列的初始化(尽管我们新手们不知道初始化做了什么);

           (2)不同的DLL工程 选择对应的宏。