我叫学得会 发表于 2021-4-11 18:18:42

c++引用汇编语言报错

本帖最后由 我叫学得会 于 2021-4-11 18:21 编辑

师傅们,我复现资料上的代码例子,在c++引用汇编模块,不知道是哪里没有设置好,报一堆错误,还请师傅们指点



#include <windows.h>
#include <stdio.h>


int main()
{

    LPVOID lp = GetProcAddress(LoadLibraryA("user32.dll"), "MessageBoxA");
    char * pszData = "Hello world";
    _asm
    {
      push 0
      push 0
      push pszData
      push 0
      call lp
    }
    return 0;
}

严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C2440        “初始化”: 无法从“const char ”转换为“char *”        汇编1        E:\mytest\汇编1.cpp        9       
严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C4235        使用了非标准扩展: 不支持在此结构上使用“__asm”关键字        汇编1        E:\mytest\汇编1.cpp        10       
严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C2065        “push”: 未声明的标识符        汇编1        E:\mytest\汇编1.cpp        12       
严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C2143        语法错误: 缺少“;”(在“常数”的前面)        汇编1        E:\mytest\汇编1.cpp        12       
严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C2146        语法错误: 缺少“;”(在标识符“push”的前面)        汇编1        E:\mytest\汇编1.cpp        13       
严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C2065        “push”: 未声明的标识符        汇编1        E:\mytest\汇编1.cpp        13       
严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C2143        语法错误: 缺少“;”(在“常数”的前面)        汇编1        E:\mytest\汇编1.cpp        13       
严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C2146        语法错误: 缺少“;”(在标识符“push”的前面)        汇编1        E:\mytest\汇编1.cpp        14       
严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C2065        “push”: 未声明的标识符        汇编1        E:\mytest\汇编1.cpp        14       

wp231957 发表于 2021-4-11 18:20:58

错误信息呢

我叫学得会 发表于 2021-4-11 18:22:02

wp231957 发表于 2021-4-11 18:20
错误信息呢

严重性      代码      说明      项目      文件      行      禁止显示状态
错误      C2440      “初始化”: 无法从“const char ”转换为“char *”      汇编1      E:\mytest\汇编1.cpp      9      
严重性      代码      说明      项目      文件      行      禁止显示状态
错误      C4235      使用了非标准扩展: 不支持在此结构上使用“__asm”关键字      汇编1      E:\mytest\汇编1.cpp      10      
严重性      代码      说明      项目      文件      行      禁止显示状态
错误      C2065      “push”: 未声明的标识符      汇编1      E:\mytest\汇编1.cpp      12      
严重性      代码      说明      项目      文件      行      禁止显示状态
错误      C2143      语法错误: 缺少“;”(在“常数”的前面)      汇编1      E:\mytest\汇编1.cpp      12      
严重性      代码      说明      项目      文件      行      禁止显示状态
错误      C2146      语法错误: 缺少“;”(在标识符“push”的前面)      汇编1      E:\mytest\汇编1.cpp      13      
严重性      代码      说明      项目      文件      行      禁止显示状态
错误      C2065      “push”: 未声明的标识符      汇编1      E:\mytest\汇编1.cpp      13      
严重性      代码      说明      项目      文件      行      禁止显示状态
错误      C2143      语法错误: 缺少“;”(在“常数”的前面)      汇编1      E:\mytest\汇编1.cpp      13      
严重性      代码      说明      项目      文件      行      禁止显示状态
错误      C2146      语法错误: 缺少“;”(在标识符“push”的前面)      汇编1      E:\mytest\汇编1.cpp      14      
严重性      代码      说明      项目      文件      行      禁止显示状态
错误      C2065      “push”: 未声明的标识符      汇编1      E:\mytest\汇编1.cpp      14   

wp231957 发表于 2021-4-11 20:49:38

这种写法只能是vc60的吧    gcc却是不支持这样写法
不知道你的编译器是啥    自己先百度一下吧

肖-肖 发表于 2021-4-11 21:07:21

本帖最后由 肖-肖 于 2021-4-11 21:08 编辑

将:char * pszData = "Hello world";
改为:
char str[]="Hello world";
char* pszData = str;
试试吧!
这种嵌套的也确实是只有:Visual C++ 这个编译器可以

我叫学得会 发表于 2021-4-11 21:56:05

wp231957 发表于 2021-4-11 20:49
这种写法只能是vc60的吧    gcc却是不支持这样写法
不知道你的编译器是啥    自己先百度一下吧

vs2019 的MSVC++

我叫学得会 发表于 2021-4-11 21:56:44

肖-肖 发表于 2021-4-11 21:07
将:char * pszData = "Hello world";
改为:
char str[]="Hello world";


在vs2019,怎么才能可以呢?

wp231957 发表于 2021-4-11 22:03:00

我叫学得会 发表于 2021-4-11 21:56
在vs2019,怎么才能可以呢?

我没有环境,无法帮你,但是我简单的搜了一下
发现32位内联汇编,你的代码应该没有问题
可是64位内联汇编就会报和你一样的错误
错误信息也狠明显,不支持__asm关键字
解决办法狠复杂,我没往下看

肖-肖 发表于 2021-4-11 23:57:20

我叫学得会 发表于 2021-4-11 21:56
在vs2019,怎么才能可以呢?

这个我不会{:10_277:}

我叫学得会 发表于 2021-4-12 08:50:15

wp231957 发表于 2021-4-11 22:03
我没有环境,无法帮你,但是我简单的搜了一下
发现32位内联汇编,你的代码应该没有问题
可是64位内联汇 ...

想不明白,我看别人视频教程上的案例,vs2017上就可以这么运行,我原样搬下来试运行的....

wp231957 发表于 2021-4-12 08:52:10

我叫学得会 发表于 2021-4-12 08:50
想不明白,我看别人视频教程上的案例,vs2017上就可以这么运行,我原样搬下来试运行的....

那你就看一下你的系统是32还是64

我叫学得会 发表于 2021-4-12 11:02:14

wp231957 发表于 2021-4-12 08:52
那你就看一下你的系统是32还是64

64用64的编译中...
页: [1]
查看完整版本: c++引用汇编语言报错