主页
Top.Mail.Ru Yandeks.Metrika
论坛:“主要”;
当前存档:2004.12.12;
下载:[xml.tar.bz2];

向下

DLL中的表单问题 找到类似的分支


Amadey   (2004-11-24 15:20) [0]

祝所有自尊的大师们度过美好的一天!
我有一个问题:
有一个库,里面有一些功能,包括一对表格。
标准表格电话:
尝试
Form1:= TForm1.Create(Nil);
如果Form1.ShowModal = mrOk那么
...
除了
Form1.Free;
结束;


DLL中的表单在程序运行时表现正常,当您关闭整个程序时,会出现运行错误216等错误...
如果你不使用带有表单的函数,那么就没有错误,所以假设问题出在表单中,更确切地说,当它从内存中卸载时。

亲爱的同事们,有人可以帮助我的悲伤,而Tobashka开始沸腾,我将非常感激!



Amadey   (2004-11-24 15:24) [1]

请原谅我
而不是 - 设置 finaly



digger ©   (2004-11-24 16:47) [2]

在项目选项中,安装 - 带运行时包的Bild。 它帮助了我。



Гаврила ©   (2004-11-24 17:37) [3]

必须尝试创建表单
否则应该没有问题,其他地方就是错误



Amoeba ©   (2004-11-24 17:42) [4]

查找并研究德尔福王国网站上的相关文章:http://www.delphikingdom.com
一切都画在那里。



Amadey   (2004-11-24 18:36) [5]

在网站上的相关文章中,nichrome没有说明如果你删除一个组件,那么一切正常。
并且与表单上的Graphic.dcu相关联的任何组件都会生成此错误 - 该怎么办?



Юрий Зотов ©   (2004-11-24 18:58) [6]

> Amadey(24.11.04 15:20)

在这段代码中一切都很好,只需设置Create BEFORE试试。

完成时的216错误通常与内存管理有关。 如果你不使用ShareMem,那么给出DLL导出的所有函数的头文件,如果你这样做,那么检查它们是否在第一个Dpr中。



Amadey   (2004-11-24 19:25) [7]

有这样一个文件:

unit utils;

接口

//返回文本字符串而不是数字。
//值 - 数字
// Dec - 显示或不显示小数部分
// Podpis - 显示或不显示签名
// PodpisStrS(D) - 文本值签名
function CurrenciToStr(Value:Double; PodpisStrS,PodpisStrD:PChar; const Podpis:Boolean = True; const Dec:Boolean = True):PChar; STDCALL; 外部“Utils.dll”;

//返回日期的文本字符串(模拟是原生的,但总是用俄语)
//数据 - 日期
//完整 - 全名或简称(1 January2004г/ 1 Jan 2004)
// Sclon - 月份(1月/ 1月; 3月/ 3月等)
函数DateToStrRus(数据:TDateTime; Full:Boolean = True; Sclon:Boolean = True):PChar; STDCALL; 外部“Utils.dll”;

//返回年份的开始日期
function DayOfYearFirst(Data:TDateTime):TDateTime; STDCALL; 外部“Utils.dll”;

//返回年终日期
function DayOfYearLast(Data:TDateTime):TDateTime; STDCALL; 外部“Utils.dll”;

//返回季度开始日期
function DayOfKvartalFirst(Data:TDateTime):TDateTime; STDCALL; 外部“Utils.dll”;

//返回季度结束的日期
function DayOfKvartalLast(Data:TDateTime):TDateTime; STDCALL; 外部“Utils.dll”;

//返回月份的开始日期
function DayOfMonthFirst(Data:TDateTime):TDateTime; STDCALL; 外部“Utils.dll”;

//返回月末日期
function DayOfMonthLast(Data:TDateTime):TDateTime; STDCALL; 外部“Utils.dll”;

//返回一周的开始日期
function DayOfWeekFirst(Data:TDateTime):TDateTime; STDCALL; 外部“Utils.dll”;

//返回星期结束日期
function DayOfWeekLast(Data:TDateTime):TDateTime; STDCALL; 外部“Utils.dll”;

//返回值的周期(在变量DateFirst,DateLast中)
// DateFirst,DateLast - 句点结束开始的日期
//标题 - 窗口标题
// TextVid-1:文本回复(默认)
// 2:以日期格式回复
函数ChoosePeriod(var DateFirst,DateLast:TDateTime;标题:PChar; TextVid:Integer = 1):PChar; stdcall; 外部“ Utils.dll”;

//返回星期几的文本值
//全名-全名或简称(“星期五” /“星期五”)
//大写-首字母大写(“星期五” /“星期五”)
函数DayOfWeekRus(数据:TDateTime;完整:布尔= True;上层:布尔= True):PChar; stdcall; 外部“ Utils.dll”;

履行

结束。



Юрий Зотов ©   (2004-11-24 21:14) [8]

>艾玛迪(24.11.04 19:25)[7]

据我了解,函数参数中不使用长字符串和动态数组,因此也不使用ShareMem。

在这种情况下,我们可以假定由于对PChar的不正确操作而导致发生错误216(在EXE中分配了内存,但在DLL中释放了内存,反之亦然)。 特别是,返回带有结果的PChar的函数(CurrenciToStr等)看起来非常可疑。

例如,给出DLL中的CurrenciToStr实现代码以及用于从EXE调用它的代码。



Amadey   (2004-11-25 08:53) [9]

有了这些功能,一切都很好,使用表格时会掉线
函数ChoosePeriod(var DateFirst,DateLast:TDateTime;标题:PChar; TextVid:Integer = 1):PChar; stdcall; 外部“ Utils.dll”;
如果不使用该表格,则不会发生例外



Юрий Зотов ©   (2004-11-25 15:08) [10]

>艾玛迪(25.11.04 08:53)[9]

再一次。

1.您引用的代码段中没有错误(除了Create应该在尝试之前,但这不适用于主题)。 她(或他们)在别的地方。

2.从错误216的角度来看,带有参数PChar和ESPECIALLY的函数返回PChar看起来非常可疑。 如果在一个模块中分配了用于此类参数或结果的内存,并在另一个模块中释放了内存,则很有可能在关闭程序时出现错误216的原因。

3.您没有提供该函数的实现代码和调用该函数的代码的示例,也无法从您提供的代码中看到PChar的内存已分配和释放的位置。 因此,不可能说出更具体的内容。



Amadey   (2004-11-26 17:02) [11]

谢谢大家,话题已经结束。

对于那些有兴趣的人!

问题不在DLL中,也不在调用程序中,从这个角度来看,一切都很好!

XPManifest的问题,或者说来自Borland的名为themes.dcu(pas)的文件的问题。
当在程序目录中的调用表单或清单文件中找到它时,将在Dll中为该表单的对象分配内存,然后释放不正确。
我尝试在不同的计算机上运行:如果有启用了桌面主题的XP,则发生所描述的错误,没有一个或另一个操作系统-没有错误。
  决策
在Themes.pas文件中,修复内存释放错误并重新编译! 之后,问题消失了!

谢谢大家的帮助。



Страницы: 1 整个分支

论坛:“主要”;
当前存档:2004.12.12;
下载:[xml.tar.bz2];

楼上





内存:0.6 MB
时间:0.056 c
9-1092038968
NikeOLD
2004-08-09 12:09
2004.12.12
OpenGL显示列表


14-1101315996
Sicilla
2004-11-24 20:06
2004.12.12
检查邮件


1-1101233951

2004-11-23 21:19
2004.12.12
生活在运行时


1-1101452426
sergg
2004-11-26 10:00
2004.12.12
BitBtn题字分为两行


14-1100873270
by
2004-11-19 17:07
2004.12.12
Delphi 7 Professional中是否有TClientDataSet组件?





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法语
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 淡米尔文 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский