urenai 发表于 2022-9-5 17:09:29

割掉三千烦恼丝,从此DLL是路人。

本帖最后由 urenai 于 2022-9-5 23:37 编辑

120 行   //return (gCallStartupMethod () != 0);// 调用用户程序启动类的启动方法这行注释了,就没问题了,gCallStartupMethod ()的锅。 本来这个函数就是执行下面这一句
换成:
      return (((@sn<startup_class>&)g_objVolApp.GetVolApp ()).@sn<startup_method> () != 0);


dengzf 发表于 2022-9-5 18:58:34

http://bbs.voldp.com/forum.php?mod=viewthread&tid=14536&highlight=dll

urenai 发表于 2022-9-5 19:44:56

dengzf 发表于 2022-9-5 18:58
http://bbs.voldp.com/forum.php?mod=viewthread&tid=14536&highlight=dll



没什么用,
cpp: /Od
cpp: /O2
cpp: /MD
cpp: /Ot
cpp: /Zc:threadSafeInit-
还有一些,全测试了。
都不行。
我感觉像是,DLL的运行基础类的问题。因为,【启动方法】一旦返回,程序就崩。





urenai 发表于 2022-9-5 19:54:58

算了,我等下把w_startup.v 文件扒出来,精简掉所有无用过程再试试。

urenai 发表于 2022-9-5 23:05:18

学习....

wjks86 发表于 2022-9-6 10:28:01

666,楼主问题解决啦?!

飞扬工作室 发表于 2022-9-6 14:55:53

dll的启动方法是在dll被挂接的时候调用的,按照windows的规定,很多功能是不能在此处执行的. 最好的方法就是你暴露一个初始化方法,由主程序在合适的时候调用一下.

server 发表于 2022-9-6 15:01:42

牵一发动全身。
最终解决方案,完美方案。
割掉          启动方法/ 被销毁 虚拟方法。
新建_DLLMain(,,)虚拟方法。
直接回调。

server 发表于 2022-9-6 15:09:57

对头,dllmain函数是初始函数,比喻说创建线程,这个API。所创建的线程在dllmain没有返回的情况下。

新线程是不会被启动。
这就是windows规定。

wjks86 发表于 2022-9-6 15:52:40

server 发表于 2022-9-6 15:01
牵一发动全身。
最终解决方案,完美方案。
割掉          启动方法/ 被销毁 虚拟方法。


大神,这个具体要怎么做,能不能给个例子啥的
页: [1]
查看完整版本: 割掉三千烦恼丝,从此DLL是路人。