VC++调试DLL程序怎么会不从BOOL WINAPI DllMain入口? DLL是否正确加载,你的断点位置是否正确 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没啥两样。断点都设在开头,都是按F5。他的程序就停在DllMain的入口处,我的程序就停在另一个函数的return处。 没啥两样。断点都设在开头,都是按F5。他的程序就停在DllMain的入口处,我的程序就停在另一个函数的return处。程序rebuild一下,再加载试试 你写的那个dll被其他地方调用了吗? Windows 核心编程,关于LoadLibraryEx中的第3个参数dwFlags的说明: 没啥两样。断点都设在开头,都是按F5。他的程序就停在DllMain的入口处,我的程序就停在另一个函数的return处。程序rebuild一下,再加载试试啥叫“加载”? 是不是你的dll没有拷贝到调用该dll的exe的目录中??? 现在把问题简化,希望大家踊跃发言:我的改动太大了,到底哪里出错很难查出。现在把问题简单化:不合并文件。只在原来的程序上改动一点:把一个函数取消,把其中的代码移动到调用它的地方。实际上整个程序也只有这一个地方调用它,而且也只调用一次,根本不需要用函数调用的方式。原来调用它的地方就在程序的入口:DllMain一开始的地方,见图中划红线的地方:被调用的函数的功能是注册四个窗口类并建立4个窗口,其开头部分如下图:图中划红线的语句“WNDCLASSEX wc;”定义了一个结构变量,用于注册四个窗口类。由于是C语言不是C++,所以变量定义要移到函数开头,或者设为全局变量。可是我不论把它移到DllMain函数开头,还是把它移到函数之前作为全局变量,都会导致调试时不从DllMain入口,不理会断点,无法调试。请问是啥原因?难道我必须改回函数调用吗? 原来能正常调试的Dll也没有拷贝到调用该dll的exe的目录中,都能正常调试。 补充:1、由于取消函数RegisterIMEClass调用方式,改为直接执行其代码,因此这部分代码中的所有形参hInstance都用实参g_hInst取代。2、取消函数后,原来的函数申明也取消。上面10楼的图中没有取消,是个bug,但是我取消之后问题依然如故。 把这句废话改成g_hInst=hInstDLL;也不行。把这句话改成hInstDLL=hInstDLL;也不行。改成只有一个分号的空语句(连同后面的注释)倒是可以的。 你这个有可能是没有把Debug版的生成文件拷贝到system32目录中所致。 原先那个能正常从DllMain入口的程序也没有把Debug版的生成文件拷贝到system32目录中 这个问题,由于我对他的程序改动太大,很难找出问题在哪里。因此我慢慢来,先改一点点,看看行不行。结果一点点都不允许改,哪怕加一句废话都会造成不能调试。详情参阅:http://bbs.csdn.net/topics/390898214?page=1#post-398283277 关于CString和char*的转换问题 算法求助: 打开一个URL 隐藏情况下 有关在dialog中响应鼠标消息的问题,请高手赐教 一个DLL调用的问题 如何让菜单中一个指定的菜单项灰掉?不可用? 关于聊天室 请教!如何将数据库中的 OLE对象 读出 并写入文件? 高分求助!关于高级程序员考试的几个问题。 如何判别一个DLL文件是否是COM组件? 关于远程桌面控制互联网实现的问题. 在DLG中嵌入了HTMLVIE 点击出发刷新VIEW事件 为什么原来内容还是存在?
他的程序就停在DllMain的入口处,我的程序就停在另一个函数的return处。
他的程序就停在DllMain的入口处,我的程序就停在另一个函数的return处。
程序rebuild一下,再加载试试
他的程序就停在DllMain的入口处,我的程序就停在另一个函数的return处。
程序rebuild一下,再加载试试
啥叫“加载”?
我的改动太大了,到底哪里出错很难查出。现在把问题简单化:
不合并文件。只在原来的程序上改动一点:把一个函数取消,把其中的代码移动到调用它的地方。
实际上整个程序也只有这一个地方调用它,而且也只调用一次,根本不需要用函数调用的方式。
原来调用它的地方就在程序的入口:DllMain一开始的地方,见图中划红线的地方:被调用的函数的功能是注册四个窗口类并建立4个窗口,其开头部分如下图:图中划红线的语句“WNDCLASSEX wc;”定义了一个结构变量,用于注册四个窗口类。
由于是C语言不是C++,所以变量定义要移到函数开头,或者设为全局变量。
可是我不论把它移到DllMain函数开头,还是把它移到函数之前作为全局变量,都会导致调试时不从DllMain入口,不理会断点,无法调试。请问是啥原因?难道我必须改回函数调用吗?
1、由于取消函数RegisterIMEClass调用方式,改为直接执行其代码,因此这部分代码中的所有形参hInstance都用实参g_hInst取代。
2、取消函数后,原来的函数申明也取消。上面10楼的图中没有取消,是个bug,但是我取消之后问题依然如故。
把这句话改成hInstDLL=hInstDLL;也不行。
改成只有一个分号的空语句(连同后面的注释)倒是可以的。
因此我慢慢来,先改一点点,看看行不行。结果一点点都不允许改,哪怕加一句废话都会造成不能调试。详情参阅:http://bbs.csdn.net/topics/390898214?page=1#post-398283277