DElphi 调dll 报地址错误 求大虾帮~

freechy2008 2011-08-21 05:35:56
在delphi中调用dll后 显示成功,但运行到该函数的结尾end时 报错。
...全文
239 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
freechy2008 2011-08-22
  • 打赏
  • 举报
回复
这段代码执行是可以正确执行的。但只要改动就会报错。即使你的改动完全没有意义。比如在此函数加一个参数。但我不用它执行ir:=IC_WritePurchase_D0_PS01就一定报错 执行 ir:=IC_Purchase_D0_Ex却不会。
但ir:=IC_WritePurchase_D0_PS01执行是成功的 需运行到end.的时候才报错
Access violation at address 0x000000 in module 'star.exe '. Read
rainychan2009 2011-08-22
  • 打赏
  • 举报
回复
LZ,请不要相信诡异一说,至少在计算机中。你这个想法只会让你正面定位、解决问题越来越远。当遇到一个问题无从下手,可以采取砍掉一步代码,精简,然后测试的办法。
freechy2008 2011-08-22
  • 打赏
  • 举报
回复
当然我改变的那个函数在此函数前被调用了。这个unit 全部都存放的调用该dll的函数。问题是我只是做一个完全不影响现在执行环境的改动。就如加一个参数,却不用它。而且我是改变另外一个函数哦。而且一旦出错。我改回去。让代码完全和以前一样。还出错。 只能说太诡异。。。。。。。
freechy2008 2011-08-22
  • 打赏
  • 举报
回复
问题在于它本身是可以的。现在这个函数所在的unit 我改变了另外一个函数一样执行到这里也出错啊。
郁闷得想死。。。。
freechy2008 2011-08-22
  • 打赏
  • 举报
回复
代码太多 我吧调用方式发出来
function IC_WritePurchase_D0_PS01(iport: Longint; iDataFormat:integer; pszID:PCHAR; dkWh:double; iTimes:integer; pszDateTime:PCHAR; iParamFlag:integer; dPrewarnningkWh:double; dWarnningkWh:double; dCornerkWh:double; dDayFee:double; dMaxOverDraftkWh:double; dMaxTickkWh:double; dMaxCurrent:double; dSpecialMaxCurrent:double;iMaxTripTimes:integer; pszPassword:PCHAR; iCalcuMode:integer; var isw:integer): Longint;
stdcall; external 'starcpu2.dll';
funxu 2011-08-22
  • 打赏
  • 举报
回复
LZ不要被报错的位置迷惑了,感觉问题应该出现在内存的使用上,使用了不该使用的内存等,这些问题在dll释放时暴露出来,所以才会在end时弹出错误,还是把主要代码贴出来看看吧
一剑飘雪 2011-08-22
  • 打赏
  • 举报
回复
贴主要代码
lhs203203 2011-08-22
  • 打赏
  • 举报
回复
请问下你调用dll的调用方式是什么你都没有写 当然在释放的时候就会报指针错误了 加上stdcall或是cdecl就可以了
rainychan2009 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 freechy2008 的回复:]

这段代码执行是可以正确执行的。但只要改动就会报错。即使你的改动完全没有意义。比如在此函数加一个参数。但我不用它执行ir:=IC_WritePurchase_D0_PS01就一定报错 执行 ir:=IC_Purchase_D0_Ex却不会。
但ir:=IC_WritePurchase_D0_PS01执行是成功的 需运行到end.的时候才报错
Access violation at ……
[/Quote]
访问0地址,肯定是尝试访问一个没有分配内存的指针
rainychan2009 2011-08-21
  • 打赏
  • 举报
回复
什么样的错呢?很怀疑是string类型的形参造成的。加ShareMM
freechy2008 2011-08-21
  • 打赏
  • 举报
回复
附该函数源码:
function gf_WritePurchase_Ex(iMode:integer;
iDataFormat:integer;
szID:string;
dkWh:double;
iTimes:integer;
szDatetime:string;
iParamFlag:integer;
dPrewarningkWh:double;
dWarningkWh:double;
dCornerkWh:double;
dMinUsekWh:double;
dMaxOverDraftkWh:double;
dMaxTickkWh:double;
dMaxLoadkW:double;
iMaxTripTimes:integer;
iPTCT:integer;
szPassword:string;
dTickLoadThreshold:double;
isw:integer;szmetermodel:string):integer;
var
ir:integer;
begin
try
if (iMode=$D0) or (iMode=$B0) then begin
if szmetermodel ='S' then
ir:=IC_Purchase_D0_Ex(giPort,iDataFormat, PChar(szID), dkWh, iTimes , PChar(szDatetime),
iParamFlag, dPrewarningkWh, dWarningkWh, dCornerkWh, dMinUsekWh,
dMaxOverDraftkWh, dMaxTickkWh, dMaxLoadkW, iMaxTripTimes, iPTCT,PChar(szPassword), iMode, dTickLoadThreshold, isw)
else
ir:=IC_WritePurchase_D0_PS01(giPort,iDataFormat, PChar(szID), dkWh, iTimes , PChar(szDatetime),
iParamFlag, dPrewarningkWh, dWarningkWh, dCornerkWh, dMinUsekWh,
dMaxOverDraftkWh, dMaxTickkWh, dMaxLoadkW, dTickLoadThreshold,iMaxTripTimes, PChar(szPassword), iMode, isw);
end else
ir:=IC_Purchase_Ex(giPort,iDataFormat, PChar(szID), dkWh, iTimes , PChar(szDatetime),
iParamFlag, dPrewarningkWh, dWarningkWh, dCornerkWh, dMinUsekWh,
dMaxOverDraftkWh, dMaxTickkWh, dMaxLoadkW, iMaxTripTimes, iPTCT,PChar(szPassword), iMode, dTickLoadThreshold, isw);
except
ir:=-1;
end;
result:=ir;
end;
Embarcadero.Delphi.10.2.2.v25.0.29039.2004.Lite.v14.3完整版,含示例、助、IOS、安卓支持、Net框架,共3G+。是最新的哦! 破解者说明如下: Embarcadero.Delphi.10.2.2.v25.0.29039.2004.Lite.v14.3 -------------------------------------------------------------------------------- 基本信息: 作者:lsuper 联系方式:... -------------------------------------------------------------------------------- 版本说明: 由于 XE5 时代 Delphi 安装体积急剧膨胀(完整安装接近 10G,程序文件、安装缓存超过 20G+),按照过去的方式打包,XE5 的 lite 体积 1.xG,接近 PE image 理论极限,而且当前 XE5 支持 x86、x64、osx、ios、android、等诸多平台功能,不好按照网友的口味进行裁剪(win32only、winonly、...) 经多方案权衡对比,决定 v8.x 开始,只使用 inno 对 Delphi 的主体功能进行封装(完整的 x86+其他支撑组件、注册表等),其他平台、功能的安装文件(x64、osx、ios、android)通过 7z 外挂的方式支持:安装时只需保证 lite exe 旁边有相关的 7z 文件(文件名不能变),在安装过程中即可选择、安装相应的功能(这意味着,如果只一个 exe、装出来就是 win32only,多一个 Ext.X64.7z,安装可选 x64 的支持,其他类推) 当前分为以下 12 个包: 包名称 文件大小 作用 Ext.3th.7z 91,226,756 网友收集的一些第三方扩展 Ext.Addons.7z 100,567,057 InterBase XE7、FastReport4 等 Ext.Android.7z 1,640,823,804 Android 编译环境 Ext.Help.7z 299,342,286 助文档 Ext.Hotfix.7z 000,000,000 网友收集的一些官方补丁 Ext.IOS.7z 3,737,156,232 IOS 编译环境 Ext.Linux.7z 1,180,105,999 Linux 编译环境 Ext.OSX.7z 846,515,926 OSX 编译环境 Ext.Samples.7z 599,352,431 范例,其实直接用 svn 的也行 Ext.SDK.7z 1,576,071,523 Android SDK/NDK 编译环境,当前包含 v23 的编译工具、虚机映像等 Ext.Support.7z 246,586,892 EMSServer、Image、LivePreview、PAServer 等支持组件 Ext.X64.7z 1,568,283,495 64 位编译环境 此外,安装程序支持: 1、保留一个第三方扩展的组件:Ext.3th.7z,当前集成 EDN 收集的扩展、增强文件,所有 7z 都会解压到 {app} 下 2、自动检测 Ext.SDK.7z 中的 SDK、NDK 版本进行设置,支持最新的 android-ndk-r9c-windows-x86+android-sdk_r24.3.3-windows 3、自动检测旁边的 jdk-7/8u*-windows-*.exe 进行安装,支持最新的 jdk-8u102-windows-i586 4、自动检测旁边的 NetFx20SP2_x86/NetFx20SP2_x64 进行安装 -------------------------------------------------------------------------------- 发布历史: 2017.12.20 - v14.3 1、根据 25.0.29039.2004 原版制作 2、集成 aldian、elseif、unis、x-force、cjack 等大虾的特别补丁 3、集成 Andreas Hausladen 的 IDE Fix Pack v6.1.2 2017.12.14 - v14.2 1、根据 25.0.28979.1978 原版制作 2、集成 elseif、unis、x-force、cjack 等大虾的特别补丁 2017.08.11 - v14.1 1、根据 25.0.27659.1188 原版制作 2、集成 elseif、unis、x-force、cjack 等大虾的特别补丁 2017.03.26 - v14.0 1、根据 25.0.26309.314 原版制作 2、集成 elseif、unis、x-force、cjack 等大虾的特别补丁 -------------------------------------------------------------------------------- 发布说明: 相对原始版本,这个 Lite 精简且只精简了原 RTM 的以下支持程序、第三方工具内容: 1、当前 Ext.Hotfix.7z 集成 30521_rad_studio_10.1_berlin_firemonkey_accessibility_pack、30530_april_2016_rad_studio_10.1_berlin_hotfix_for_datasnap、30531_april_2016_rad_studio_10.1_berlin_hotfix_for_samsung_galaxy 2、当前 Ext.3th.7z 集成 30491_firemonkey_premium_styles_pack_for_rad_studio_10.1_berlin、30492_vcl_premium_styles_pack_for_rad_studio_10.1_berlin 3、Samples 例子,可以通过 svn 获取:http://svn.code.sf.net/p/radstudiodemos/code/branches/RADStudio_Berlin/ 4、InterBase XE7、FastReport4 等,因为这些专版或者只有 dcu 没有完整源码,或者是原版功能精简版,推荐直接用原版吧 5、AQtimeRS.exe、CodeSite Express、CollabNetSubversion-client-1.7.5-1-Win32.exe、DevJET_DI_Setup_Express.exe、FBSE700.exe、RaveReportsSetup_Win.exe,当前官方 RTM 版本就是没有这些安装包的 其他: 1、PSDK 在当前官方助文档中已经没有了 2、XE7 开始,BDE 彻底消失了,需要独立的安装程序,只能通过官方注册用户下载 3、原版依赖 300多兆的 .NET Framework 3.5 sp1,我把它依赖的文件提取出来整合到安装程序中了,所以还是与以往 lite 一样,仅依赖 .NET Framework 2.0。 4、原版 Bds.exe 和 LicenseManager.exe 会访问网络,为避免不必要的流量,强烈建议直接 windows 防火墙屏蔽 其他的源码、支持库等都是绝对完整的。 -------------------------------------------------------------------------------- 已知问题: 关于 XP 下启动错问题 Q1:说:bds.exe - 无法找到入口,无法定位程序输入点 InterlockedCompareExchange64 于动态链接库 KERNEL32.DLL 上? A1:没法子,原版如此,这个 API 需要 Vista 或者 Windows Server 2003 的支持,说明 Seattle 开始 EMB 要抛弃 XP 了,其实只是 ios 编译相关的 dll 需要这个,如 dcciosxxx,甚至 mongoc 也需要,如果不需要 ios 编译,可以无视绕过,点击确定即可 Q2:启动 External exception C06D007F 的错误?这是 Castalia 的问题,Seattle IDE 直接集成了 Castalia 的代码,XE8 还可以通过注册表关闭 Castalia,Seattle 不行了 A2:后来 Unis 大侠在补丁中做了修补:Under XP simulate missing InterlockedCompareExchange64 and add stub functions for missing: AddClipboardFormatListener, RemoveClipboardFormatListener (this why (ex)castalia crash). Q3:经测试,在 XP SP3 之前的版本,依旧有问题:无法定位程序输入点 GetLogicalProcessorInformation 于动态链接库 KERNEL32.dll 上。 Q3:只能期待 Unis 大侠再次出手? 其他问题: Q4:怎么 Android SDK 还需要更新、下载? A4:原版如此;基于国情,直接集成了一个“够用的”(编译工具、虚机映像,但不包括文档、例子);也可以使用 swish 提供的 Android SDK 23.3.4:http://blog.qdac.cc/?p=2837;或者自己想办法红杏吧 ~ Qn:... An:... -------------------------------------------------------------------------------- 特别说明: 这个版本的来源于官方 Beta/RTM 正式试用版,版权归 Embarcadero 所有,请在下载后 24 小时内删除。 重新打包纯粹个人兴趣所致,希望能方便网友测试、交流。作为 Delphi 多年的 Fans,我们都希望 Delphi 能做得更好! 如果您觉得 Delphi 不错,请购买正版,更好的支持 Embarcadero 的发展! -------------------------------------------------------------------------------- 特别感谢: 1、elseif、crackerjack、dr、freecat、gateway、huayan889、kerlingen、sinner、unis、yuto 等大侠的特别补丁,感谢诸位我知道的不知道的的大虾们的辛勤劳动! 2、chineseswish、iny、nevergrief、onechen、snakejiao、star5、swish、tintin1943、ti9er、wang_80919、wuxiangyang 等等我知道的不知道的的网友们的热情测试! 3、andreas hausladen 等大虾们的无私贡献! -------------------------------------------------------------------------------- FAQ: 1、现在 Embarcadero 的安装程序已经很快了,为啥还要 Lite/Repack? 相对 D2006/2007 的安装确实进步了不少。不过依然存在安装时间长,安装完遗留大量垃圾文件、卸载可能遗留垃圾等问题。这个 Lite 或者说是 Repack,就是为了方便 Delphier 们能方便的尝试 Delphi 的新功能,同时对系统的影响降到最小。至于用 Lite/Repack 还是原版,见人见智啦。 2、这个版本的来源? 这个版本的来源于官方 Beta/RTM 正式试用版,版权归 Embarcadero 所有,请在下载后 24 小时内删除。重新打包纯粹个人兴趣所致,希望能方便网友测试、交流。作为 Delphi 多年的 Fans,我们都希望 Delphi 能做得更好!如果您觉得 Delphi 不错,请购买正版,更好的支持 Embarcadero 的发展! 3、这个 lite 版完整么? 说是 lite 版,其实就是原版 Delphi 部分的 Repack,所有 Delphi 的功能都是完整的。我所做的就是在一个绝对干净的 VMWware XP 中安装官方的版本,除了只安装 Delphi,不包括 Rave 其他一切默认。安装出来的 Disk 文件与原始标准的对比,提取所有安装的文件、注册表啥的变化,然后用 Inno 重新封装。所以这个其实不是 lite 而是 repack。 4、可否增加某某某功能? 那多交流啊 ... 5、出现 xxx 问题啦 欢迎到盒子、B4A、SMTH 等论坛上提出您的反馈 .o(∩_∩)o..
RAD Studio 10.2 Toyko Update2 10.2.2 KEYGEN 一键激活,安装时选择试用,安装完毕后一键激活即可。亲测可用!! Win10 Build 16299 旗舰版 亲测可用!!! 为了便于在 Lite 14.x 中使用大侠们的特别补丁,初步写成这个:Activator.exe 他的主要作用: 1、整合 elseif、unis、x-force、cjack 大虾的 Keygen 相对原始部署方式,这个 Activator 实现“一键激活”! 使用方法: 1、执行 Activator.exe 发布历史: 2017.12.14 - v14.2 1、根据 25.0.28979.1978 原版制作,基于 RadStudioKeygenSourceCodeTokyo10.2Update2CorrectedSetup.zip 的成果 2017.08.11 - v14.1 1、根据 25.0.27659.1188 原版制作,基于 elseif-Rad-Studio-Keygen-master upto 10.2.1 的成果 2017.03.26 - v14.0 1、根据 25.0.26309.314 原版制作,基于 elseif、unis、x-force、cjack 等大虾的成果 已知问题: 1、在一些操作系统上如果出现安全提示,直接确定即可。 特别感谢: 1、elseif、unis、x-force、cjack、crackerjack、dr、freecat、gateway、huayan889、kerlingen、sinner、yuto 等大侠的特别补丁,感谢诸位我知道的不知道的的大虾们的辛勤劳动! 2、iny、nevergrief、snakejiao、star5、tintin1943、ti9er、wang_80919、wuxiangyang 等等我知道的不知道的的网友们的热情测试! 3、andreas hausladen 等大虾们的无私贡献! O(∩_∩)O~ Delphi 10.2 and C++Builder 10.2 Updata2 亲测可用! Embarcadero® C++Builder 10.2 Version 25.0.28979.1978 Copyright © 2017 Embarcadero Technologies, Inc. All Rights Reserved. advapi32.dll, 10.0.16299.15, C:\WINDOWS\System32\ AEPIC.dll, 10.0.16299.15, C:\WINDOWS\SYSTEM32\ androiddebugide250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ appanalytics250.bpl, 25.0.28979.1978, D:\Program Files (x86)\Embarcadero\Studio\19.0\bin\ apphelp.dll, 10.0.16299.98, C:\WINDOWS\SYSTEM32\ applet250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\bin\ asmview250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ ATL.DLL, 3.5.2284.0, C:\Windows\System32\ bcbandroid250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ bcbcoment250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ bcbcompro250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ bcbent250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\studio\19.0\Bin\ bcbfmxide250.bpl, 25.0.28979.1978, d:\program files (x86)\embarcadero\s

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧