社区
C++ Builder
帖子详情
dll的问题
cdmar79
2007-02-06 02:46:00
我用两种方式开发的工程(BCB 5.0 + pack1)
方式1。静态调用dll(工程中加 .Lib,运行时伴随 .dll)
方式2。直接cpp包含
发现了一个怪事,方式1的程序对最小化没反应的(只是把窗体置后,不最小化),而方式2则没有问题
请问,是不是我的dll工程的设置不对导致的呢?还是BCB的问题
...全文
305
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
打赏
举报
回复
应该是你的程序有问题。
C#中加载
dll
的
问题
本文介绍了在C#中加载C++编译的动态库(
DLL
)时遇到的
问题
及解决方案。通过
Dll
Import加载
DLL
,并探讨了“找不到指定模块”异常的原因,包括检查路径和依赖的其他
DLL
。此外,还分享了如何使用LordPE工具查看
DLL
中的函数,以解决找不到入口点的错误。
安装软件缺少
dll
文件怎么办,分享多种解决
dll
问题
的方法
本文介绍了
DLL
文件的作用及其在软件运行中的重要性,并分析了
DLL
文件缺失的常见原因。提供了五种实用方法帮助读者解决缺少
DLL
文件的
问题
。
关于
dll
中的资源
问题
本文探讨了MFC
DLL
与共享MFC
DLL
的规则
DLL
在资源使用上的冲突
问题
,解释了HINSTANCE句柄对于加载资源的重要性,并提供了在
DLL
和应用程序中改进的方法以正确访问
DLL
资源。
DLL
地狱
问题
本文记录了解决VC6.0环境下
DLL
调用失败的
问题
过程。通过对比测试工程与
问题
工程的配置,发现缺少Manifest文件是导致
DLL
无法正常加载的原因。文章还解释了Manifest文件的作用及其如何避免
DLL
地狱。
lua链接
dll
的
问题
本文介绍了一个关于Lua脚本语言在尝试加载
DLL
文件时遇到的
问题
及其解决办法。
问题
出现在当Lua脚本试图通过require指令加载一个依赖Lua运行环境的
DLL
文件时,如果Lua运行环境
DLL
不在相同目录,则会导致加载失败。
C++ Builder
13,873
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章