递归火山软件开发平台

标题: 火山嵌入真难啊!!! [打印本页]

作者: q472448760    时间: 3 天前
标题: 火山嵌入真难啊!!!
(, 下载次数: 0) 同样的代码,64位正常运行,32位 方法接收到后是乱码然后就崩溃

作者: Xelloss0618    时间: 3 天前
注意函数的调用约定。
64位下,__stdcall 和 __cdelc 是一样的,32位下有严格区分,可能你这个函数并不是 CALLBACK(__stdcall )
作者: sunye88888    时间: 3 天前
哎 一言难尽 ,买火山就是为了中文代码,不用去学其他语言,买了之后发现,隔三差五就得整个嵌入式
我要是会嵌入 还买什么火山,直接C++得了呗
作者: 乐易论坛    时间: 3 天前
32位和64位调用约定不一样啊....
作者: b0y    时间: 3 天前
sunye88888 发表于 2025-9-10 10:32
哎 一言难尽 ,买火山就是为了中文代码,不用去学其他语言,买了之后发现,隔三差五就得整个嵌入式
我要是会嵌 ...

就是这个问题阿....  对小白火山还是更应该丰富库  嵌入式留给大佬用
作者: q472448760    时间: 3 天前
Xelloss0618 发表于 2025-9-10 08:32
注意函数的调用约定。
64位下,__stdcall 和 __cdelc 是一样的,32位下有严格区分,可能你这个函数并不是 C ...

我这是 mfc下的火山静态方法,同一个代码自己调自己, 用传指针解决了,就是不知道为啥32位用嵌如调就不行
作者: Xelloss0618    时间: 3 天前
q472448760 发表于 2025-9-10 15:57
我这是 mfc下的火山静态方法,同一个代码自己调自己, 用传指针解决了,就是不知道为啥32位用嵌如调就不 ...

可能你的函数指针类型和参数类型没写好
((void (CALLBACK*)(CVolString&)data_)) (CVolString(log_str.c_str()));
作者: 123456789    时间: 3 天前
sunye88888 发表于 2025-9-10 10:32
哎 一言难尽 ,买火山就是为了中文代码,不用去学其他语言,买了之后发现,隔三差五就得整个嵌入式
我要是会嵌 ...

诶,还真是。
作者: q472448760    时间: 3 天前
Xelloss0618 发表于 2025-9-10 16:57
可能你的函数指针类型和参数类型没写好
((void (CALLBACK*)(CVolString&)data_)) (CVolString(log_str.c_ ...

都试过了,乱码就算了。按理不应该崩溃。
调用约定的问题。报这样的错

Run-Time Check Failure #0 -The value of ESP was not properly savedacross a function call. This is usually a result of calling a functiondeclared with one calling convention with a function pointer declaredwith a different calling convention.
(Press Retry to debug the application)

都是火山调为啥会有调用约定的问题。。。
作者: Xelloss0618    时间: 3 天前
q472448760 发表于 2025-9-10 23:15
都试过了,乱码就算了。按理不应该崩溃。
调用约定的问题。报这样的错

你的火山函数是怎样的?
作者: weilai    时间: 3 天前
q472448760 发表于 2025-9-10 23:15
都试过了,乱码就算了。按理不应该崩溃。
调用约定的问题。报这样的错


老吴早就说过了,小白无需了解嵌入,老实用火山写代码就行
作者: q472448760    时间: 前天 00:09
Xelloss0618 发表于 2025-9-10 23:27
你的火山函数是怎样的?

<火山程序 类型 = "通常" 版本 = 1 />

方法 测试回调方法2 <静态>
参数 参数1 <类型 = 文本型>
{
    调试输出 (取源方法名 (), 返回结果)

}

===========
就这样,用取静态方法地址 然后嵌入调这个方法,32位是有反应的,但是输出乱码之后就崩
作者: q472448760    时间: 前天 00:13
weilai 发表于 2025-9-10 23:56
老吴早就说过了,小白无需了解嵌入,老实用火山写代码就行

没办法的了 说不听
作者: Xelloss0618    时间: 前天 09:23
q472448760 发表于 2025-9-11 00:09
方法 测试回调方法2
参数 参数1
{

测试了一下,没有问题

<火山程序 类型 = "通常" 版本 = 1 />

变量 data_ <类型 = 变整数 @输出名 = "data_">
data_ = 取静态方法地址 (测试回调方法2)
@ std::string log_str{u8"你好啊"};
@ ((void (CALLBACK*)(CVolString&))data_) (CVolString(log_str.c_str()));





欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4