urenai
发表于 2025-1-2 13:02:10
fengshangren 发表于 2025-1-2 12:43
你错了,治标不治本,他火山的一些库的封装方式,都是启动类的一些源码写法一样,只要你调用了那个库,你 ...
深入讲讲呢
urenai
发表于 2025-1-2 13:32:35
fengshangren 发表于 2025-1-1 18:25
内存运行报错,你是查到哪里出了,我也研究了两天,也是找到问题了,我这边测试是Win7的火山DLL内存调用百 ...
深入聊聊你发现的问题呢?
urenai
发表于 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文件,这行代码执行了,必定报错。
你发现的呢?
fengshangren
发表于 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:,这个可以网上查,是取的指向线程局部存储(Thread Local Storage,TLS)数据的指针。TLS指针的主要作用是提供对线程局部存储的访问,使得每个线程可以拥有自己的数据副本,互不干扰,但是被内存加载的DLL取不出这个数据指针,取出来的是错误的,特别是其它语言,比如易语言内存调用火山的DLL,在win7测试百分百出错,我在win10测试,这个指针取出来又是对的,win7取出来就是0,取不出来导致 崩溃,启动类为什么会出错,因为他也会生成这条指令,但是封装的库里面有很多这样的汇编指令,只要他是以上这种写法,都会生成这种指令,你可以改代码,换种方式实现,也会正常,但是工作量太大,我已经放弃了
urenai
发表于 2025-1-2 19:14:29
fengshangren 发表于 2025-1-2 16:16
namespace rg_n {
class MyClass {
public:
你比我研究的更深入、
@飞扬工作室
动动小手的事,能给解决了吗??
urenai
发表于 2025-1-2 19:16:36
urenai 发表于 2025-1-2 19:14
你比我研究的更深入、
@飞扬工作室
我们都在为了火山的发生更好而做出努力,
希望官网不要漠视。
飞扬工作室
发表于 2025-1-2 21:49:55
fengshangren 发表于 2025-1-2 16:16
namespace rg_n {
class MyClass {
public:
你的意思是凡是定义了静态变量的dll都不能内存载入? 那这个范畴就有点广了.
fengshangren
发表于 2025-1-2 23:24:14
你QQ多少加好友研究下吧
urenai
发表于 2025-1-3 00:14:09
fengshangren 发表于 2025-1-2 23:24
你QQ多少加好友研究下吧
吴老板 Q 3251044
我的就不发了,我很菜。
风一样存在
发表于 2025-1-3 17:59:26
自己靠边慢慢想,想多了自然也就懂了