DLL中传递结构指针的问题

赖皮鹏 赖皮鹏 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
dll中函数:
procedure getCardInfo(var aList:pInfo;iPort:integer=0);stdcall;
var
p : pInfo;
begin
getMem(p,sizeof(TInfo));
p^.Succmk := 1;
p^.aMess := 'ee';
p^.aNum := '2003';
p^.CardNo := 'AF53D7E2';
p^.aName := 'Test';
p^.aMoneyje := 24;
p^.aLimitM := 30;

aList := p;
freemem(p);
end;

结构体声明:
pInfo = ^TInfo;
//反馈信息
TInfo = record
Succmk : Integer; //成功标志 0 成功 1 失败
aMess: pchar; //失败原因
aNum : pchar; //编号
CardNo : pchar; //卡号
aName : pchar; //姓名
aMoneyje : Double; //当前卡余额
aLimitM : Double; //交易上限额度
end;

主程序调用:
procedure getCardInfo(var stuList:pStuInfo;iPort:integer=0);external 'PaySelf.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
tt : pInfo;
begin
try
getMem(tt,Sizeof(TInfo));
getCardInfo(@tt);
getCardInfo(tt);
//test(tt);
Memo1.Lines.Add(tt.aNum);
Memo1.Lines.Add(tt.CardNo);
FreeMem(tt);
except
on e:exception do
showmessage(e.Message);
end;
end;

想实现的功能是传入一个空结构体,由DLL处理后返回
现在的问题是在DLL中读取传入指针被改变后的值都是对的,但是在主程序中无法获得改变的值。
并且在未添加try语句时会报内存错误

哪位高手能为我答疑?
...全文

相关推荐

C#调用C++DLL传递结构体数组的终极解决方案

由于C#和C++对内存管理的方式不同,直接传递结构体数组可能会遇到问题。本文将详细介绍如何解决这个问题,确保C#成功调用C++DLL并正确传递结构体数组。首先,C#和C++之间的数据类型兼容性是关键。

weixin_38604916

C#调用C++编写的DLL函数各种参数传递问题

本文主要探讨了C#如何调用C++编写的DLL函数,并详细介绍了在不同情况下,如无返回值、返回字符串、返回其他类型以及传递结构体指针等参数传递的问题。C#调用C++编写的DLL函数是跨语言编程中常

weixin_38672840

c# 调用C++编写 的DLL函数各种参数传递问题。

这篇文章将详细介绍 C# 调用 C++ 编写的 DLL 函数各种参数传递问题,包括不返回值的参数、带返回值的参数、传递结构体指针和传递结构体数组等。1.

crazywind_taotao

VB和VC制作的dll中参数是结构体的传递

**数据的传递和接收**:在VB中,创建一个结构体实例,然后调用DLL函数并传递该实例。在VC的DLL函数内部,通过指针访问并修改结构体成员。完成后,VB中的结构体会反映出这些变化。6.

siaswjf

避坑指南:LabVIEW调用C++ DLL时指针传递的5个常见错误

本文深入剖析了LabVIEW调用C++ DLL时指针传递的五大常见错误,包括内存管理混淆、数据结构对齐错位、指针层级误解、调用约定不匹配及参数配置细节。重点探讨了如何正确使用MoveBlock进行数据交互,并提供了清晰的内存管理策略与结构体对齐方案,帮助工程师有效规避内存泄漏与程序崩溃风险,实现稳定高效的跨语言集成。

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