Dll调用问题,分配内存出错

xiaofeng_cxy xiaofeng_cxy 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
用一个Dll封装了几个IpHlpApi.dll的函数
然后进行调用时,会报内存ReadError
但如果用exe将封装单元引入,则完全正常,有没有大牛能帮我分析一下???

DllUnit

type
PArpRec = ^TArpRec;
TArpRec = record
Ip: string[15];
Index: Integer;
Mac: array[0..7] of Byte;
end;

function _refreshArpTable: Boolean;
var
i, j: Integer;
dwResult, dwSize: DWORD;
p_arptable: PMibIpNetTable;
p_arprow: PMibIpNetRow;
szTemp: string;
parp: PArpRec;
begin
szTemp := '';
p_arptable := nil;

for i := 0 to _arpTable.Count - 1 do
FreeMem( PArpRec( _arpTable.Objects[i] ) );
_arpTable.Clear;
dwSize := 0;
dwResult := GetIpNetTable(p_arptable, dwSize, False);
// if p_arptable = nil then
//报错的就是这行
p_arptable := AllocMem(dwSize);

try
if NO_ERROR = GetIpNetTable(p_arptable, dwSize, False) then
begin
for i := 0 to p_arptable.dwNumEntries - 1 do
begin
p_arprow := AllocMem(SizeOf(TMibIpNetRow));
ZeroMemory(p_arprow, SizeOf(TMibIpNetRow));
Move(p_arptable^.table[i], p_arprow^, SizeOf(TMibIpNetRow));
parp := AllocMem( SizeOf( TArpRec) );
parp^.Ip := inet_ntoa( in_addr( p_arprow^.dwAddr ) );
parp^.Index := p_arprow^.dwIndex;
for j := 0 to 5 do
parp^.Mac[j] := p_arprow^.bPhysAddr[j];

_arpTable.AddObject(parp^.Ip, TObject( parp ));
end;
end;
finally
// if p_arptable <> nil then
FreeMem(p_arptable);
end;
end;

错误信息:
Access violation at address 014663E2 in module 'Arpwatch.dll' write of address 0147FDCC

在线等待,不胜感谢!!!
...全文

相关推荐

Python优化技巧之利用ctypes提高执行速度

ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数。今天我们就来详细探讨下ctypes库的使用技巧

weixin_38569722

把 ABAP 采购订单增强做成一条可控流水线:BAdI ME_PROCESS_PO_CUST 全流程实战

摘要: SAP MM模块的ME_PROCESS_PO_CUST BAdI提供了采购订单全生命周期的增强点,覆盖从ME2*N事务到BAPI调用的各类场景。该接口通过INITIALIZE、OPEN、PROCESS_*系列方法、CHECK等组成完整处理流水线,支持字段控制、业务校验、数据派生等功能。关键注意事项包括:PROCESS_*方法仅在相关对象变更时触发、字段控制需区分参考键与动态规则、避免递归调用等。该BAdI采用面向对象设计,通过IF_PURCHASE_ORDER_*等接口操作采购单据对象,而非直接修改

汪子熙

业务开关驱动的 SAP CRM WebClient UI 配置处理全流程解析

WebClient UI 与 Switch Framework 的深度耦合,使得“配置决定 + 开关裁剪 + 结果持久化”成为一个自洽的生命周期。理解这套机制后,你不仅能读懂 F2 窗口里的两个小勾,更能在项目中自如设计开关策略,实现功能灰度发布与性能优化。下一次当需求提出“根据模块授权动态隐藏视图”时,不妨考虑把业务逻辑下放到 Switch Framework,通过开关来优雅完成。

汪子熙

华为MetaERP # EBS → Fusion BC 预算模块【业务规则对齐实施指南】定位:迁移蓝图「业务规则映射章节」标准内容,承接主数据映射、余额迁移、预算校验逻辑迁移。> > 核心结

本文为EBS迁移至FusionBC预算模块的业务规则对齐实施指南,重点解析两系统预算模型差异及迁移方案。核心差异包括:EBS采用总账依附型三层占用模型,而FusionBC为独立多维引擎,支持自定义消耗阶段。实施路线分五步:全面梳理EBS预算规则(7类关键规则)、分层归类(A/B/C三类)、逐项对齐(重点处理占用规则和调整机制)、识别固有差异(5项架构级差异)、输出标准化交付物。特别强调不能简单照搬EBS规则,需通过配置+客户化改造实现业务目标,最终需通过测试用例验证规则落地一致性。迁移成功关键在于早期识别模

金牌架构师

Windows CE 编程的十点忠告

Windows CE 编程的十点忠告

Jimixu
评论 9
收藏 已收藏
分享
返回顶部
xiaofeng_cxy
Windows SDK/API 1,184 成员 22,326 内容