递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

419

主题

1921

帖子

7916

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7916
QQ
跳转到指定楼层
#
发表于 2024-12-31 23:06:36 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 urenai 于 2024-12-31 23:07 编辑

来来来,赶紧贴上二维码,赞助你两毛钱。

玩归玩闹归闹。
本次更新 DLL支持定位输出序号,非常棒。
  1.   按下 "ESC" 键关闭这窗口         

  2. 模块名称:nullDll.dll  
  3. 更多
  4.         TimeDateStamp: FFFFFFFF
  5.         版本: 0.00   
  6.         序数基址: 00000001   
  7.         函数编号: 00000002           
  8.         编号名称: 00000001      
  9.         
  10.   无名称  rva: 00001070 ord:   1
  11.   _a_ rva: 00001060 ord:   2
复制代码
吴总已经讲过规则了。
在这里,我再简单阐述一下:
@输出名=“apiname”        // 编译结果  导出函数名:apiname
@输出名=“apiname_1_”   // 编译结果  导出函数名:apiname   该导出函数所在导出表第  1  位;
@输出名=“apiname_1n_”   // 编译结果  导出函数名:无名称   该导出函数所在导出表第  1  位;
这里的无名称 就是字面意思,实际上没有字符。

应该时讲清楚了吧。
散会

@飞扬工作室  如果可以,能否修复DLL在某种应用下 内存运行 报错问题?

问题代码已经找到了,就是没能力继续搞下去,暂时只能阉割掉启动类 临时解决,关键是不知道有没有后遗症。
如果不打算修复,希望官方能回应一下,这么搞 阉割启动类 会不会有影响:
之前搞DLL报错的童鞋们 进来。 - 火山平台俱乐部 - 递归火山软件开发平台 - Powered by Discuz!


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

使用道具 举报

419

主题

1921

帖子

7916

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7916
QQ
20#
 楼主| 发表于 2025-1-3 20:12:35 | 只看该作者
niuyanbo2021 发表于 2025-1-1 07:56
没看懂,你讲的是在DLL里实现按ESC关闭窗口这个功能,是吗?
这个问题我也卡住了好久。 ...

直接消息子类化,你自己处理主窗口的消息循环,
当得到按键消息-> esc 键 按下时,执行你想执行的操作。
专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

0

主题

64

帖子

668

积分

高级会员

Rank: 4

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

使用道具 举报

419

主题

1921

帖子

7916

积分

核心用户

Rank: 9Rank: 9Rank: 9

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

吴老板 Q 3251044

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

使用道具 举报

43

主题

355

帖子

3908

积分

论坛元老

Rank: 8Rank: 8

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

使用道具 举报

66

主题

1859

帖子

9442

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

419

主题

1921

帖子

7916

积分

核心用户

Rank: 9Rank: 9Rank: 9

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

@飞扬工作室

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

使用道具 举报

419

主题

1921

帖子

7916

积分

核心用户

Rank: 9Rank: 9Rank: 9

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

你比我研究的更深入、

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

使用道具 举报

43

主题

355

帖子

3908

积分

论坛元老

Rank: 8Rank: 8

积分
3908
13#
发表于 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,取不出来导致 崩溃,启动类为什么会出错,因为他也会生成这条指令,但是封装的库里面有很多这样的汇编指令,只要他是以上这种写法,都会生成这种指令,你可以改代码,换种方式实现,也会正常,但是工作量太大,我已经放弃了


回复

使用道具 举报

419

主题

1921

帖子

7916

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7916
QQ
12#
 楼主| 发表于 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的心理及生理教育辅导。
回复

使用道具 举报

419

主题

1921

帖子

7916

积分

核心用户

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 09:58 , Processed in 0.098937 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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