递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 2623|回复: 13
打印 上一主题 下一主题

[视窗] 火山嵌入真难啊!!!

[复制链接]

10

主题

106

帖子

1076

积分

金牌会员

Rank: 6Rank: 6

积分
1076
跳转到指定楼层
楼主
发表于 2025-9-10 07:53:28 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
同样的代码,64位正常运行,32位 方法接收到后是乱码然后就崩溃
回复

使用道具 举报

29

主题

2740

帖子

9539

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
9539
14#
发表于 2025-9-11 09:23:21 | 只看该作者
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()));
回复

使用道具 举报

10

主题

106

帖子

1076

积分

金牌会员

Rank: 6Rank: 6

积分
1076
13#
 楼主| 发表于 2025-9-11 00:13:30 | 只看该作者
weilai 发表于 2025-9-10 23:56
老吴早就说过了,小白无需了解嵌入,老实用火山写代码就行

没办法的了 说不听
回复

使用道具 举报

10

主题

106

帖子

1076

积分

金牌会员

Rank: 6Rank: 6

积分
1076
12#
 楼主| 发表于 2025-9-11 00:09:13 | 只看该作者
Xelloss0618 发表于 2025-9-10 23:27
你的火山函数是怎样的?

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

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

}

===========
就这样,用取静态方法地址 然后嵌入调这个方法,32位是有反应的,但是输出乱码之后就崩
回复

使用道具 举报

25

主题

454

帖子

3826

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3826
11#
发表于 2025-9-10 23:56:44 来自手机 | 只看该作者
q472448760 发表于 2025-9-10 23:15
都试过了,乱码就算了。按理不应该崩溃。
调用约定的问题。报这样的错


老吴早就说过了,小白无需了解嵌入,老实用火山写代码就行
回复

使用道具 举报

29

主题

2740

帖子

9539

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
9539
10#
发表于 2025-9-10 23:27:31 | 只看该作者
q472448760 发表于 2025-9-10 23:15
都试过了,乱码就算了。按理不应该崩溃。
调用约定的问题。报这样的错

你的火山函数是怎样的?
回复

使用道具 举报

10

主题

106

帖子

1076

积分

金牌会员

Rank: 6Rank: 6

积分
1076
9#
 楼主| 发表于 2025-9-10 23:15:45 | 只看该作者
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)

都是火山调为啥会有调用约定的问题。。。
回复

使用道具 举报

99

主题

595

帖子

4536

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
4536
8#
发表于 2025-9-10 17:45:01 | 只看该作者
sunye88888 发表于 2025-9-10 10:32
哎 一言难尽 ,买火山就是为了中文代码,不用去学其他语言,买了之后发现,隔三差五就得整个嵌入式
我要是会嵌 ...

诶,还真是。
回复

使用道具 举报

29

主题

2740

帖子

9539

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
9539
7#
发表于 2025-9-10 16:57:58 | 只看该作者
q472448760 发表于 2025-9-10 15:57
我这是 mfc下的火山静态方法,同一个代码自己调自己, 用传指针解决了,就是不知道为啥32位用嵌如调就不 ...

可能你的函数指针类型和参数类型没写好
((void (CALLBACK*)(CVolString&)data_)) (CVolString(log_str.c_str()));
回复

使用道具 举报

10

主题

106

帖子

1076

积分

金牌会员

Rank: 6Rank: 6

积分
1076
6#
 楼主| 发表于 2025-9-10 15:57:21 | 只看该作者
Xelloss0618 发表于 2025-9-10 08:32
注意函数的调用约定。
64位下,__stdcall 和 __cdelc 是一样的,32位下有严格区分,可能你这个函数并不是 C ...

我这是 mfc下的火山静态方法,同一个代码自己调自己, 用传指针解决了,就是不知道为啥32位用嵌如调就不行
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2025-12-10 10:47 , Processed in 0.102912 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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