社区
C++ Builder
帖子详情
dll的问题
cdmar79
2007-02-06 02:46:00
我用两种方式开发的工程(BCB 5.0 + pack1)
方式1。静态调用dll(工程中加 .Lib,运行时伴随 .dll)
方式2。直接cpp包含
发现了一个怪事,方式1的程序对最小化没反应的(只是把窗体置后,不最小化),而方式2则没有问题
请问,是不是我的dll工程的设置不对导致的呢?还是BCB的问题
...全文
268
14
打赏
收藏
dll的问题
我用两种方式开发的工程(BCB 5.0 + pack1) 方式1。静态调用dll(工程中加 .Lib,运行时伴随 .dll) 方式2。直接cpp包含 发现了一个怪事,方式1的程序对最小化没反应的(只是把窗体置后,不最小化),而方式2则没有问题 请问,是不是我的dll工程的设置不对导致的呢?还是BCB的问题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kangji
2007-02-07
打赏
举报
回复
学习
cdmar79
2007-02-07
打赏
举报
回复
找到问题了
是DLL中的
#include <FileCtrl.hpp>
惹的祸
只是为了使用DirectoryExists函数。。。
算了,自己用GetFileAttributes替代吧!
cdmar79
2007-02-07
打赏
举报
回复
干脆,再把我N年前发现的Forms.pas(相当与Forms.hpp)的问题也描述一下,供大家参考!
如果dll中出现uses Forms.pas(C++:#include <Forms.hpp>),无论是直接的还是间接的。那么
在动态加载(先LoadLibrary再FreeLibrary)的时候,内存会泄露(每次大约4k~8k左右),如果反复这样动态加载,内存泄露就会非常明显;如果没有Forms.pas则不会出现泄露。
这回的问题是无法最小化。想来是消息传递出问题了,也就是消息没传到我想要它去的地方。为什么呢?
会不会是这样的,forms会在每次使用它的时候向内存注册一个新的VCL环境,而Windows系统在传递消息的时候,没有把消息传递到新的环境,而是只到了老环境,导致消息无法相应;同时,反复使用forms,相当于反复开新环境,就必然会消耗内存。。。
cdmar79
2007-02-07
打赏
举报
回复
再补充一点
在FileCtrl.hpp中
// Borland C++ Builder
// Copyright (c) 1995, 1999 by Borland International
// All rights reserved
// (DO NOT EDIT: machine generated header) 'FileCtrl.pas' rev: 5.00
#ifndef FileCtrlHPP
#define FileCtrlHPP
。。。。
#include <Forms.hpp> // Pascal unit //////////////////问题就出在这里了
。。。
归纳整个问题如下:
首先,dll中要使用FileCtrl.hpp的DirectoryExists函数
那么就出现了与
http://www.80diy.com/home/20000407/11/6707.html
类似的情况。为了能够进行编译,就不得不选中build with runtime package。
选中了build with runtime package,则不在dll中带入VCL环境,这实际上导致了
这么一种组合
dll中#include <Forms.hpp>,并且dll是build with runtime package
在这样的情况下,主调用程序在使用dll的时候就会无法最小化
我后来又实验了一个,在dll中直接#include <Forms.hpp>,并且使用了Forms中的至少一个函数,结果就是无法最小化的。。。这个实验与我实际遇到的问题的差别就是:实验直接#include <Forms.hpp>,而实际中我是间接#include <Forms.hpp>的。
看来,还是验证了我一开始的疑窦,问题还是在Forms.hpp上的。。。
估计是个bug
我以前用delphi 6的时候遇到的就是这个问题,现在看来,如果C++ Builer 6是Delphi 6的弟兄,那么在C++ Builder 6中还会存在这个问题(我现在用的是 C++ Builder 5),所以,提出来供大家参考。
cdmar79
2007-02-06
打赏
举报
回复
刚又测试了好久
估计是dll出问题了,可能是包含了BCB的某个.h/.hpp后导致的。
现在正在一个一个验证头文件包含的可能错误
不过,我隐约感到一个问题,forms.hpp
因为我多年前用delphi的时候,发现当dll包含forms.pas的时候会有内存泄露,而BCB中的forms.hpp正好与forms.pas对应。。。
希望不是这样
等我的测试结果吧!
xiaoshi0
2007-02-06
打赏
举报
回复
你发给我也没用,我也没有BCB的环境。
那你的意思是说,只要你用了那个dll文件,就会出现这样的情况,如果没用的话,就不会出现是么?
即使是这样,也不一定和你的DLL有关啊,或者你可以生成一个新的工程,然后包含你的DLL,然后你再看看是否还是有那样的情况。
cdmar79
2007-02-06
打赏
举报
回复
To xiaoshi0(Rain)
你有邮箱吗?我把工程发给你吧!
cdmar79
2007-02-06
打赏
举报
回复
1.窗体不是dll中的
2.“置后”是指,当前运行的窗体,当我按最小化按钮之后,窗体并未最小化到任务栏,而是失去焦点并停留在桌面上。
3。窗体属性未改动,就是工程默认的fsNormal,没有其他窗体特效
xiaoshi0
2007-02-06
打赏
举报
回复
你能不能把你的问题问得清楚一点,你的窗体是在DLL中创建的么?
你的窗体被你修改过属性么?
你说的“只是把窗体置后,不最小化”是什么意思?单纯的置后,为什么要最小化?你说的置后又是什么意思?
cdmar79
2007-02-06
打赏
举报
回复
我刚刚用了一个最简单的方式,模拟了我的两种方式
extern "C" __declspec(dllexport) int (__stdcall TestDll)(); 导出
生成testdll.dll,testdll.lib
然后,.exe工程
USELIB("E:\Lib\testdll.lib");
extern "C" __declspec(dllimport) int (__stdcall TestDll)(); 导入
程序执行正确,但就是.exe无法最小化
cdmar79
2007-02-06
打赏
举报
回复
都是默认的。。。。
我刚才找到一个delphi的相关问题
http://topic.csdn.net/t/20050426/13/3967566.html#
但是,还是没说怎么搞!
xiaoshi0
2007-02-06
打赏
举报
回复
你的窗体怎么创建的?用了哪些style和exstyle?
cdmar79
2007-02-06
打赏
举报
回复
可能会是什么问题??
我没有拦截消息
我试过了,用WndProc去跟踪方式1的窗口,结果,最小化就是跳不进去(无论是WM_SIZE还是WM_SYSCOMMAND)。
另,我对dll工程和exe工程都设置为
compiler: release
packages: build with run time package
调用的函数也很普通
int __stdcall CodeLength_Logger(MLogger &ALogger)
bool __stdcall Decode_Logger(TStream *Buffer, MLogger &ALogger)
MLogger是一个struct
xiaoshi0
2007-02-06
打赏
举报
回复
应该是你的程序有问题。
vcruntime140.
dll
问题
的解决方法
安装apache时提示“vcruntime140.
dll
”。只不过是因为vc++的运行库的
问题
。本软件中包括了64位系统的各种版本的vc++运行库,主要全部安装,
问题
就能得到解决
解决api-ms-win-crt-runtime-l1-1-0.
dll
丢失
问题
绿色版 工具下载
提示api-ms-win-crt-runtime-l1-1-0.
dll
丢失,安装这个小玩意就可以解决了
Fp4autl.
dll
,Fpencode.
dll
,Fp4awel.
dll
安装office2007提示: windows installer 服务不能更新一个或多个受保护的windows文件
问题
解决. 下载这三个文件保存到对应的路径,即可正常安装.
遇到Qt调用
dll
问题
(整理版)
(younghz)遇到Qt调用
dll
问题
,search后整理如下: 首先列出几种错误,然后介绍解决方法。 (younghz后加:正确格式应该在-L和-l之后没有空格--14.3.30) 解决方法:
DLL
与LIB的区别 : 1.
DLL
是一个完整程序,其已经经过链接,即不存在同名引用,且有导出表,与导入表lib是一个代码集(也叫函数集)他没有
安装Modelsim时,双击patch_
dll
.bat文件提示找不到mgls.
dll
或mgls64.
dll
问题
我这次安装的时是Modelsim 2019(win64)链接如下: 链接:https://pan.baidu.com/s/1j07HiLygrxAKFidOqyGMXw 提取码:0v9n 复制这段内容后打开百度网盘手机App,操作更方便哦 1将文件夹crack文件中patch_
dll
和MentorKG.exe文件复制到安装目录中win64文件夹下 2.以管理员身份运行patch_
dll
文件时,提示找不到mgls.
dll
文件 解决办法:打开patch_
dll
文件,将文件内容改为: 3.在命...
C++ Builder
13,826
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章