问个关于DLL内存拷贝的问题
RT,在DLL中定义一个结构体
TBusinessData = packed reocrd
FSevice : char[0..50];
FStyle : char[0..50];
FPrice : integer;
FYear : Word;
FMoney : Doubel;
end;
TReportData = array of TBusinessData ;
PReportData = ^TReportData;
然后定义一函数,原型是:
function GetReportData(nStart,nEnd : TSYSTEMTIME;var aCount : integer) : pointer ;Export;Stdcall;
var pData : PReportData;
begin
//acount 为查询得到的记录数
GetMem(pData,Sizeof(TBusinessData ) * acount);
Setlength(TReportData(pData^),acount);
for i := low(TReportData(pData^)) to high(TReportData(pData^)) do
begin
with TReportData(pData^)[i] do
begin
lstrcpy(FSevice,pchar('测试'));
.
.
.
end;
end;
result := pdata;
end;
然后我在DLPHI里面可以调用,并且能够从返回的指针中正确的取出所有值,但是VC调用时,它返回的值都是乱码
如果在DLL中只返回一个结构体指针,那也可以正确的获取结构体指针中的数据,一旦改为上面这种方式就不行了,不知道什么原因!!!!!
TBusinessData = packed reocrd
FSevice : char[0..50];
FStyle : char[0..50];
FPrice : integer;
FYear : Word;
FMoney : Doubel;
end;
TReportData = array of TBusinessData ;
PReportData = ^TReportData;
然后定义一函数,原型是:
function GetReportData(nStart,nEnd : TSYSTEMTIME;var aCount : integer) : pointer ;Export;Stdcall;
var pData : PReportData;
begin
//acount 为查询得到的记录数
GetMem(pData,Sizeof(TBusinessData ) * acount);
Setlength(TReportData(pData^),acount);
for i := low(TReportData(pData^)) to high(TReportData(pData^)) do
begin
with TReportData(pData^)[i] do
begin
lstrcpy(FSevice,pchar('测试'));
.
.
.
end;
end;
result := pdata;
end;
然后我在DLPHI里面可以调用,并且能够从返回的指针中正确的取出所有值,但是VC调用时,它返回的值都是乱码
如果在DLL中只返回一个结构体指针,那也可以正确的获取结构体指针中的数据,一旦改为上面这种方式就不行了,不知道什么原因!!!!!
...全文
相关推荐
解决计算机丢失MSVCR120.dll、MSVCP120.dll等问题
解决计算机丢失MSVCR120.dll、MSVCP120.dll等问题,程序运行时报错计算机丢失MSVCR120.dll、MSVCP120.dll,拷贝库到运行目录下或者System下也不行
易语言-内存中运行DLL易语言
源码调用了内存加载PE模块。 内存中直接运行DLL,绝对不会释放DLL出来。所要加载的DLL无需处理,直接可用。支持加壳后的DLL。
拷贝EXE文件相关联的。DLL文件
有些可执行文件在拷贝时我们需要把相关联的.dll文件也拷贝出来,此程序正实现了这一点,这样可以防止出错。
kernel32.dll
缺少kernel32.dll引起的问题,本文件包括kernel32.dll和其描述。
解决win7 64位系统开发或者游戏出现缺少msvcp100d.dll或者msvcr100d.dll的问题
一、如果您的系统提示"找不到msvcp100d.dll"或"msvcr100d.dll缺失"等等,请不用担心,请把下载到本机。 二、直接拷贝该目录到WIN7系统的C:\Windows目录 三、然后打开"开始-运行-输入regsvr32 msvcp100d.dll和regsvr32 msvcr100d.dll",回车即可解决错误提示!


语言基础/算法/系统设计
