鱼C论坛

 找回密码
 立即注册
查看: 6966|回复: 11

c++引用汇编语言报错

[复制链接]
发表于 2021-4-11 18:18:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 我叫学得会 于 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 [12]”转换为“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       

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-11 18:20:58 From FishC Mobile | 显示全部楼层
错误信息呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-11 18:22:02 | 显示全部楼层

严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C2440        “初始化”: 无法从“const char [12]”转换为“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   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-11 20:49:38 | 显示全部楼层
这种写法只能是vc60的吧    gcc却是不支持这样写法
不知道你的编译器是啥    自己先百度一下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-11 21:07:21 | 显示全部楼层
本帖最后由 肖-肖 于 2021-4-11 21:08 编辑

将:char * pszData = "Hello world";
改为:
char str[]="Hello world";
char* pszData = str;
试试吧!
这种嵌套的也确实是只有:Visual C++ 这个编译器可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-11 21:56:05 | 显示全部楼层
wp231957 发表于 2021-4-11 20:49
这种写法只能是vc60的吧    gcc却是不支持这样写法
不知道你的编译器是啥    自己先百度一下吧

vs2019 的MSVC++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-11 21:56:44 | 显示全部楼层
肖-肖 发表于 2021-4-11 21:07
将:char * pszData = "Hello world";
改为:
char str[]="Hello world";

在vs2019,怎么才能可以呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-11 22:03:00 From FishC Mobile | 显示全部楼层
我叫学得会 发表于 2021-4-11 21:56
在vs2019,怎么才能可以呢?

我没有环境,无法帮你,但是我简单的搜了一下
发现32位内联汇编,你的代码应该没有问题
可是64位内联汇编就会报和你一样的错误
错误信息也狠明显,不支持__asm关键字
解决办法狠复杂,我没往下看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-11 23:57:20 | 显示全部楼层
我叫学得会 发表于 2021-4-11 21:56
在vs2019,怎么才能可以呢?

这个我不会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-12 08:50:15 | 显示全部楼层
wp231957 发表于 2021-4-11 22:03
我没有环境,无法帮你,但是我简单的搜了一下
发现32位内联汇编,你的代码应该没有问题
可是64位内联汇 ...

想不明白,我看别人视频教程上的案例,vs2017上就可以这么运行,我原样搬下来试运行的....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-12 08:52:10 From FishC Mobile | 显示全部楼层
我叫学得会 发表于 2021-4-12 08:50
想不明白,我看别人视频教程上的案例,vs2017上就可以这么运行,我原样搬下来试运行的....

那你就看一下你的系统是32还是64
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-12 11:02:14 | 显示全部楼层
wp231957 发表于 2021-4-12 08:52
那你就看一下你的系统是32还是64

64用64的编译中...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表