delphi调用C动态库问题
时间:2011-09-07
来源:互联网
C动态库中定义了一个结构体如下:
结构体
typedef struct st_itemselect_
{
WORD wID; //编号
VOID *pValue; //编号所对应的数据缓冲区
WORD wValueLen; //数据缓冲区大小
}ITEMSELECT,*P_ITEMSELECT;
调用的函数声明如下:
DWORD GetItem(void *pvSelect,int nItem);
/*
pvSelect: ST_ITEMSELECT * 数组模板
nItem : 需要读取的ST_ITEMSELECT个数。
*/
此函数的功能是通过结构体中传入的编号参数,获取到对应的数据缓冲区值。
我现在用DELPHI去调用执行,先定义对应的结构体如下:
type
PItemSelect = ^TItemSelect;
TItemSelect = packed record
wID: WORD;
pValue: pointer;
wValueLen: WORD;
end;
定义的调用函数如下:
function GetItem(pvSelect:pointer;nItem:integer):DWORD;stdcall;
程序实现如下:
var
st_itemselect:array of PItemSelect; //定义结构体对象数组
begin
SetLength(st_itemselect,1); //设定数组上限为1
GetMem(st_itemselect[0],Sizeof(TItemSelect)); //分配数组内存
st_itemselect[0].wID:=1; //设置传入参数
t_itemselect[0].pValue:=GetMemory(18); //分配返回缓冲区
st_itemselect[0].wValueLen:=18;
GetItem(st_itemselect,1); //调用DLL函数
showmessage(pChar(st_itemselect[0].pValue)); //显示返回缓冲区结果
FreeMemory(st_itemselect[0].pValue); //释放缓冲区内存
FreeMem(st_itemselect[0]); //释放数组内存
st_itemselect:=nil;
end;
然而程序运行后获取的结果是乱码,并不是正确的数据,请问是上述过程中那个环节我弄错了,谢谢。
结构体
typedef struct st_itemselect_
{
WORD wID; //编号
VOID *pValue; //编号所对应的数据缓冲区
WORD wValueLen; //数据缓冲区大小
}ITEMSELECT,*P_ITEMSELECT;
调用的函数声明如下:
DWORD GetItem(void *pvSelect,int nItem);
/*
pvSelect: ST_ITEMSELECT * 数组模板
nItem : 需要读取的ST_ITEMSELECT个数。
*/
此函数的功能是通过结构体中传入的编号参数,获取到对应的数据缓冲区值。
我现在用DELPHI去调用执行,先定义对应的结构体如下:
type
PItemSelect = ^TItemSelect;
TItemSelect = packed record
wID: WORD;
pValue: pointer;
wValueLen: WORD;
end;
定义的调用函数如下:
function GetItem(pvSelect:pointer;nItem:integer):DWORD;stdcall;
程序实现如下:
var
st_itemselect:array of PItemSelect; //定义结构体对象数组
begin
SetLength(st_itemselect,1); //设定数组上限为1
GetMem(st_itemselect[0],Sizeof(TItemSelect)); //分配数组内存
st_itemselect[0].wID:=1; //设置传入参数
t_itemselect[0].pValue:=GetMemory(18); //分配返回缓冲区
st_itemselect[0].wValueLen:=18;
GetItem(st_itemselect,1); //调用DLL函数
showmessage(pChar(st_itemselect[0].pValue)); //显示返回缓冲区结果
FreeMemory(st_itemselect[0].pValue); //释放缓冲区内存
FreeMem(st_itemselect[0]); //释放数组内存
st_itemselect:=nil;
end;
然而程序运行后获取的结果是乱码,并不是正确的数据,请问是上述过程中那个环节我弄错了,谢谢。
作者: miaoyuli 发布时间: 2011-09-07
function GetItem(pvSelect:pointer;nItem:integer):DWORD;cdecl;
作者: yushf 发布时间: 2011-09-07
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28