递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
楼主: urenai
打印 上一主题 下一主题

[视窗] 听劝的吴老板最可爱

[复制链接]

388

主题

1785

帖子

7186

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7186
QQ
11#
 楼主| 发表于 2025-1-2 13:02:10 | 只看该作者
fengshangren 发表于 2025-1-2 12:43
你错了,治标不治本,他火山的一些库的封装方式,都是启动类的一些源码写法一样,只要你调用了那个库,你 ...

深入讲讲呢
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

388

主题

1785

帖子

7186

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7186
QQ
12#
 楼主| 发表于 2025-1-2 13:32:35 | 只看该作者
fengshangren 发表于 2025-1-1 18:25
内存运行报错,你是查到哪里出了,我也研究了两天,也是找到问题了,我这边测试是Win7的火山DLL内存调用百 ...

深入聊聊你发现的问题呢?
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

388

主题

1785

帖子

7186

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7186
QQ
13#
 楼主| 发表于 2025-1-2 13:34:12 | 只看该作者
fengshangren 发表于 2025-1-1 18:25
内存运行报错,你是查到哪里出了,我也研究了两天,也是找到问题了,我这边测试是Win7的火山DLL内存调用百 ...

*\vol_dev\up_chs_person\plugins\vprj_win\classlib\sys\base\libs\win_base\cpp\vol_classes.cpp
    // 必须放在最后,以防用户程序在类的构造方法中访问前面的信息.
    m_pVolAppObject = (CVolUserApp*)pVolAppRuntimeClass->CreateObject ();
复制代码


核心cpp文件,这行代码执行了,必定报错。
你发现的呢?
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

43

主题

345

帖子

3732

积分

论坛元老

Rank: 8Rank: 8

积分
3732
14#
发表于 2025-1-2 16:16:50 | 只看该作者

namespace rg_n {
        class MyClass {
        public:
                // 构造函数和析构函数现在不需要额外的参数
                MyClass() {}
                ~MyClass() {}

                // 假设的静态函数,用于演示(实际上不创建对象)
                static void sCreateNewObject() {
                        std::cout << "Creating new MyClass object (but not really)" << std::endl;
                }


                // 修正后的宏定义
#define _DECLARE_GLOBAL_VOL_RUNTIME_CLASS(class_name) \
        static CVolRuntimeClass* sGetRuntimeClass() { \
            static CVolRuntimeClass s_infRuntimeClass(#class_name); \
            return &s_infRuntimeClass; \
        }

        // 应用宏到MyClass类
                _DECLARE_GLOBAL_VOL_RUNTIME_CLASS(MyClass)

                static CVolRuntimeClass* sGetRuntimeClasssa()
                {

                        static CVolRuntimeClass s_infRuntimeClassa("rg_n::MyClass");
                        return &s_infRuntimeClassa;
                }



        };

}



火山的代码中有这种写法的,这种宏和静态方法的写法和调用,都不能内存加载,他会在汇编里生成一个汇编指令mov ecx ,fs:[2Ch],这个可以网上查,是取的指向线程局部存储(Thread Local Storage,TLS)数据的指针。TLS指针的主要作用是提供对线程局部存储的访问,使得每个线程可以拥有自己的数据副本,互不干扰‌,但是被内存加载的DLL取不出这个数据指针,取出来的是错误的,特别是其它语言,比如易语言内存调用火山的DLL,在win7测试百分百出错,我在win10测试,这个指针取出来又是对的,win7取出来就是0,取不出来导致 崩溃,启动类为什么会出错,因为他也会生成这条指令,但是封装的库里面有很多这样的汇编指令,只要他是以上这种写法,都会生成这种指令,你可以改代码,换种方式实现,也会正常,但是工作量太大,我已经放弃了


回复

使用道具 举报

388

主题

1785

帖子

7186

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7186
QQ
15#
 楼主| 发表于 2025-1-2 19:14:29 | 只看该作者
fengshangren 发表于 2025-1-2 16:16
namespace rg_n {
        class MyClass {
        public:

你比我研究的更深入、

@飞扬工作室
动动小手的事,能给解决了吗??
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

388

主题

1785

帖子

7186

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7186
QQ
16#
 楼主| 发表于 2025-1-2 19:16:36 | 只看该作者
urenai 发表于 2025-1-2 19:14
你比我研究的更深入、

@飞扬工作室

我们都在为了火山的发生更好而做出努力,
希望官网不要漠视。
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

63

主题

1743

帖子

8917

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8917
17#
发表于 2025-1-2 21:49:55 | 只看该作者
fengshangren 发表于 2025-1-2 16:16
namespace rg_n {
        class MyClass {
        public:

你的意思是凡是定义了静态变量的dll都不能内存载入? 那这个范畴就有点广了.
回复

使用道具 举报

43

主题

345

帖子

3732

积分

论坛元老

Rank: 8Rank: 8

积分
3732
18#
发表于 2025-1-2 23:24:14 | 只看该作者
你QQ多少加好友研究下吧
回复

使用道具 举报

388

主题

1785

帖子

7186

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7186
QQ
19#
 楼主| 发表于 2025-1-3 00:14:09 | 只看该作者
fengshangren 发表于 2025-1-2 23:24
你QQ多少加好友研究下吧

吴老板 Q 3251044

我的就不发了,我很菜。
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

0

主题

30

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
20#
发表于 2025-1-3 17:59:26 | 只看该作者
自己靠边慢慢想,想多了自然也就懂了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-30 14:13 , Processed in 0.091392 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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