我真的想使用MFC的一些功能,但它很难开始工作。
我原本想做的就是添加两个旋转控件及其各自的编辑控件。一旦我实现了他们设置Range的适当方法,我发现我需要使用MFC。
所以VS抱怨没有MFC。所以我去项目属性并添加使用MFC共享DLL。跑吧,崩溃! Win32Project1.exe中0x5964D8D2(mfc120ud.dll)的未处理异常:0xC0000005:访问冲突读取位置0x00000000
所以我尝试了静态,错误!很多链接器错误,要列出很多。
所以我回到了共享。错误发生在此区域。
/////////////////////////////////////////////////////////////////////////////
// export WinMain to force linkage to this module
extern int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine, int nCmdShow);
extern "C" int WINAPI
_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine, int nCmdShow)
#pragma warning(suppress: 4985)
{
// call shared/exported WinMain
return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
}
最后一个箭头
当地人将hInstance的值显示为红色+ + hInstance 0x000d0000 {Win32Project1.exe!_IMAGE_DOS_HEADER ImageBase} {unused = 9460301} HINSTANCE *
和lpCmdLine + lpCmdLine 0x00831f8c L“”wchar_t *
这超出了我的调试专业知识,而且非常坦率地会考虑不使用MFC的旋转框的另一种替代方案,但似乎我越来越需要MFC,因为我想要包含更多功能,所以它让MFC工作会很好,但它似乎也更脆弱。或许对像我这样的粗糙程序员敏感。
我想知道#includes是否可能导致此错误?订单?还是缺乏?
这是我到目前为止在stdafx.h中的内容
#pragma once
#pragma comment ( lib, "user32.lib" )
#pragma comment ( lib, "comctl32.lib" )
#pragma comment ( lib, "winmm.lib")//to play audio
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#include "targetver.h"
//#include <WinSDKVer.h>
//#include <afxwin.h>
#include <afxcmn.h>//for spinControl
#include <Afx.h>
#include <stdio.h>
#include <tchar.h>
#include "iostream"
#include "string.h"
#include <math.h>
//#include <ctime>//more time related stuff
#include <fstream>//for file io
#include <thread>//for threads
//#include <chrono> //for time related stuff
//#include <windows.h>
#include <Mmsystem.h>//to play audio
#include <commctrl.h>
#include <atlstr.h>//for some type of string
#include <io.h>
#include <fcntl.h>
#include <commctrl.h> //For button sytles, maybe other styles
答案 0 :(得分:0)
这永远不会奏效。删除你的WinMain。
您的应用程序需要CWinApp对象。有了这个CWinApp对象,你就是一个特定于MFC的WinMain入口点。
MFC中继内部单例,指向您的CWinApp对象。没有它,几乎所有东西都会失败,并且可以抛出ASSERT。
答案 1 :(得分:0)
我建议你创建一个示例MFC应用程序,然后将MFC代码从示例应用程序移动到Win32应用程序。如果Win32应用程序较小,您可以将Win32代码移动到MFC应用程序。
通常,您将使用示例应用程序中的CWinApp类而不是WinMain。
如果您不打算使用MFC UI类和&amp;只希望使用一些支持类,如CString等,然后你可以创建一个MFC支持的示例控制台应用程序,它将告诉你如何在控制台应用程序中使用CString。控制台应用程序将为您提供有关如何在Win32项目中添加所需标头的信息。
答案 2 :(得分:0)
正如之前的答案所提到的那样,但我想我会澄清一下 - 尝试在代码中添加CWinApp
(或CWinAppEx
)对象来定义WinMain,例如:
class MyApp : public CWinApp
{
public:
virtual BOOL InitInstance()
{
// Add initialisation code here e.g. show a dialog or main window, etc.
return TRUE; // enter the message loop;
// could return FALSE to just exit the application if for example the
// dialog response is all you need to then quit.
}
};
// And somewhere in your code be sure to instantiate the object so that it can be linked
MyApp theApp;