char * lpText="c/c++中汇编";
__asm{
push MB_OK
push lpCaption
push lpText
push NULL
call dword ptr MessageBoxA
}
请问为什么这段代码在WIN编程中好用!而在用MFC框架的程序中报错:
D:\Documents and Settings\Administrator\桌面\aaa\MainFrm.cpp(119) : error C2420: 'MessageBoxA' : illegal symbol in first operand
D:\Documents and Settings\Administrator\桌面\aaa\MainFrm.cpp(120) : error C2415: improper operand type
Error executing cl.exe.
aaa.exe - 2 error(s), 0 warning(s)
13 个解决方案
#1
帮你顶,关注!
#2
严重关注
#3
push NULL
push lpCaption
push lpText
push MB_OK
猜的^_^
#4
因该如下使用:
char * lpCaption="aaa";
char * lpText="c/c++中汇编";
int (__stdcall *fun)( HWND , LPCTSTR , LPCTSTR , UINT );
fun = ::MessageBox;
__asm{
push MB_OK
push lpCaption
push lpText
push NULL
call dword ptr fun
}
char * lpCaption="aaa";
char * lpText="c/c++中汇编";
int (__stdcall *fun)( HWND , LPCTSTR , LPCTSTR , UINT );
fun = ::MessageBox;
__asm{
push MB_OK
push lpCaption
push lpText
push NULL
call dword ptr fun
}
#5
代码移植有许多问题
在MFC 中要用::访问全局函数。
在MFC 中要用::访问全局函数。
#6
call MessageBoxA 好象直接这样可以,没VC没法调,你可以试一下
#7
lovenoend(有容乃大):应该不行吧
如果行的话,原程序也应该行的。
如果行的话,原程序也应该行的。
#8
在这里你应该用Unicode编码的MessageBoxW。
wchar_t * lpCaption=L"aaa"; //unicode编码的字符串
wchar_t * lpText=L"c/c++中汇编";
__asm{
push MB_OK
push lpCaption
push lpText
push NULL
call dword ptr MessageBoxW
}
wchar_t * lpCaption=L"aaa"; //unicode编码的字符串
wchar_t * lpText=L"c/c++中汇编";
__asm{
push MB_OK
push lpCaption
push lpText
push NULL
call dword ptr MessageBoxW
}
#9
谢谢broadoceans(broadoceans)兄:能再说一下为什么吗?
谢谢najzni(najzni) ( )兄:您的也对:能再说一下为什么吗?
马上结贴给分!!!!!!!!!!!!!!!
谢谢najzni(najzni) ( )兄:您的也对:能再说一下为什么吗?
马上结贴给分!!!!!!!!!!!!!!!
#10
为什么我的程序在win32 application工程中不用改动也能用?
#11
你可以看一看在mfc中引用MessageBox的头文件,
它是一个条件编译的宏。在mfc中,默认的是unicode编码,所以应该为MessageBoxW.
如果自己要调用ascii,必须自己指定。当然你也可以#undef来达到同样的目的。
它是一个条件编译的宏。在mfc中,默认的是unicode编码,所以应该为MessageBoxW.
如果自己要调用ascii,必须自己指定。当然你也可以#undef来达到同样的目的。
#12
在winuser.h里可以找到如下一段代码:
int
WINAPI
MessageBoxA(
HWND hWnd ,
LPCSTR lpText,
LPCSTR lpCaption,
UINT uType);
WINUSERAPI
int
WINAPI
MessageBoxW(
HWND hWnd ,
LPCWSTR lpText,
LPCWSTR lpCaption,
UINT uType);
#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif // !UNICODE
在VC编译器设置里面也是用的"_MBCS" ,也就是说默认采用的是mbcs编码,即是英文用一个字节编码,中文用两个字节编码。对应MessageBoxA的形式。所以在VC里默认的调用方式是MessageBoxA。说实话,我也不明白为什么在__asm{}里面,必须采用UICODE编码的形式。只是以前我碰到过类似的情况。我觉得broadoceans(broadoceans网友的“在mfc中,默认的是unicode编码,所以应该为MessageBoxW.”不是很确切。以上只是我的个人观点,不正确之处还望大家指正。
int
WINAPI
MessageBoxA(
HWND hWnd ,
LPCSTR lpText,
LPCSTR lpCaption,
UINT uType);
WINUSERAPI
int
WINAPI
MessageBoxW(
HWND hWnd ,
LPCWSTR lpText,
LPCWSTR lpCaption,
UINT uType);
#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif // !UNICODE
在VC编译器设置里面也是用的"_MBCS" ,也就是说默认采用的是mbcs编码,即是英文用一个字节编码,中文用两个字节编码。对应MessageBoxA的形式。所以在VC里默认的调用方式是MessageBoxA。说实话,我也不明白为什么在__asm{}里面,必须采用UICODE编码的形式。只是以前我碰到过类似的情况。我觉得broadoceans(broadoceans网友的“在mfc中,默认的是unicode编码,所以应该为MessageBoxW.”不是很确切。以上只是我的个人观点,不正确之处还望大家指正。
#13
najzni(najzni)说的是呀!
再次感谢楼上两兄!!!!!!!请允许我再等两贴,就结分.
为什么用::全局调用也好用,难道看到__asm{},MFC就将MessageBox引用为MessageBoxW,
就是说__asm{}中必须采用UICODE编码的形式.
再次感谢楼上两兄!!!!!!!请允许我再等两贴,就结分.
为什么用::全局调用也好用,难道看到__asm{},MFC就将MessageBox引用为MessageBoxW,
就是说__asm{}中必须采用UICODE编码的形式.
#1
帮你顶,关注!
#2
严重关注
#3
push NULL
push lpCaption
push lpText
push MB_OK
猜的^_^
#4
因该如下使用:
char * lpCaption="aaa";
char * lpText="c/c++中汇编";
int (__stdcall *fun)( HWND , LPCTSTR , LPCTSTR , UINT );
fun = ::MessageBox;
__asm{
push MB_OK
push lpCaption
push lpText
push NULL
call dword ptr fun
}
char * lpCaption="aaa";
char * lpText="c/c++中汇编";
int (__stdcall *fun)( HWND , LPCTSTR , LPCTSTR , UINT );
fun = ::MessageBox;
__asm{
push MB_OK
push lpCaption
push lpText
push NULL
call dword ptr fun
}
#5
代码移植有许多问题
在MFC 中要用::访问全局函数。
在MFC 中要用::访问全局函数。
#6
call MessageBoxA 好象直接这样可以,没VC没法调,你可以试一下
#7
lovenoend(有容乃大):应该不行吧
如果行的话,原程序也应该行的。
如果行的话,原程序也应该行的。
#8
在这里你应该用Unicode编码的MessageBoxW。
wchar_t * lpCaption=L"aaa"; //unicode编码的字符串
wchar_t * lpText=L"c/c++中汇编";
__asm{
push MB_OK
push lpCaption
push lpText
push NULL
call dword ptr MessageBoxW
}
wchar_t * lpCaption=L"aaa"; //unicode编码的字符串
wchar_t * lpText=L"c/c++中汇编";
__asm{
push MB_OK
push lpCaption
push lpText
push NULL
call dword ptr MessageBoxW
}
#9
谢谢broadoceans(broadoceans)兄:能再说一下为什么吗?
谢谢najzni(najzni) ( )兄:您的也对:能再说一下为什么吗?
马上结贴给分!!!!!!!!!!!!!!!
谢谢najzni(najzni) ( )兄:您的也对:能再说一下为什么吗?
马上结贴给分!!!!!!!!!!!!!!!
#10
为什么我的程序在win32 application工程中不用改动也能用?
#11
你可以看一看在mfc中引用MessageBox的头文件,
它是一个条件编译的宏。在mfc中,默认的是unicode编码,所以应该为MessageBoxW.
如果自己要调用ascii,必须自己指定。当然你也可以#undef来达到同样的目的。
它是一个条件编译的宏。在mfc中,默认的是unicode编码,所以应该为MessageBoxW.
如果自己要调用ascii,必须自己指定。当然你也可以#undef来达到同样的目的。
#12
在winuser.h里可以找到如下一段代码:
int
WINAPI
MessageBoxA(
HWND hWnd ,
LPCSTR lpText,
LPCSTR lpCaption,
UINT uType);
WINUSERAPI
int
WINAPI
MessageBoxW(
HWND hWnd ,
LPCWSTR lpText,
LPCWSTR lpCaption,
UINT uType);
#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif // !UNICODE
在VC编译器设置里面也是用的"_MBCS" ,也就是说默认采用的是mbcs编码,即是英文用一个字节编码,中文用两个字节编码。对应MessageBoxA的形式。所以在VC里默认的调用方式是MessageBoxA。说实话,我也不明白为什么在__asm{}里面,必须采用UICODE编码的形式。只是以前我碰到过类似的情况。我觉得broadoceans(broadoceans网友的“在mfc中,默认的是unicode编码,所以应该为MessageBoxW.”不是很确切。以上只是我的个人观点,不正确之处还望大家指正。
int
WINAPI
MessageBoxA(
HWND hWnd ,
LPCSTR lpText,
LPCSTR lpCaption,
UINT uType);
WINUSERAPI
int
WINAPI
MessageBoxW(
HWND hWnd ,
LPCWSTR lpText,
LPCWSTR lpCaption,
UINT uType);
#ifdef UNICODE
#define MessageBox MessageBoxW
#else
#define MessageBox MessageBoxA
#endif // !UNICODE
在VC编译器设置里面也是用的"_MBCS" ,也就是说默认采用的是mbcs编码,即是英文用一个字节编码,中文用两个字节编码。对应MessageBoxA的形式。所以在VC里默认的调用方式是MessageBoxA。说实话,我也不明白为什么在__asm{}里面,必须采用UICODE编码的形式。只是以前我碰到过类似的情况。我觉得broadoceans(broadoceans网友的“在mfc中,默认的是unicode编码,所以应该为MessageBoxW.”不是很确切。以上只是我的个人观点,不正确之处还望大家指正。
#13
najzni(najzni)说的是呀!
再次感谢楼上两兄!!!!!!!请允许我再等两贴,就结分.
为什么用::全局调用也好用,难道看到__asm{},MFC就将MessageBox引用为MessageBoxW,
就是说__asm{}中必须采用UICODE编码的形式.
再次感谢楼上两兄!!!!!!!请允许我再等两贴,就结分.
为什么用::全局调用也好用,难道看到__asm{},MFC就将MessageBox引用为MessageBoxW,
就是说__asm{}中必须采用UICODE编码的形式.