该dll采用结构体传递参数
为了将对模块的操作简单化。动态链接库中所有的函数的参数均通过一个结构体(ZT)来传递。现将该结构体及有关函数说明如下:
struct ZT
{
long lIndex; /*模块索引值,该值在安装时被系统分配*/
HANDLE hHandle; /*模块的操作句柄(只有涉及中断时才用)*/
short nCh; /* 通道号*/
long lData; /*输入输出数据变量*/
long* plData; /*输入输出数据指针*/
long lCode; /*设备控制字,具体含义见函数说明*/
}; 打开设备:
函数:__declspec(dllexport) long _stdcall OpenUSB7kC(ZT_USBBOARD* bs)
功能:打开某一模块
入口有效参数:lIndex 模块索引值
出口返回参数:hHandle 模块的操作句柄(只有涉及中断时,返回才有意义)
返回值: 0 打开设备成功
-1 打开设备失败我是菜鸟,请各位大侠不吝赐教!急等!
最好有代码!
为了将对模块的操作简单化。动态链接库中所有的函数的参数均通过一个结构体(ZT)来传递。现将该结构体及有关函数说明如下:
struct ZT
{
long lIndex; /*模块索引值,该值在安装时被系统分配*/
HANDLE hHandle; /*模块的操作句柄(只有涉及中断时才用)*/
short nCh; /* 通道号*/
long lData; /*输入输出数据变量*/
long* plData; /*输入输出数据指针*/
long lCode; /*设备控制字,具体含义见函数说明*/
}; 打开设备:
函数:__declspec(dllexport) long _stdcall OpenUSB7kC(ZT_USBBOARD* bs)
功能:打开某一模块
入口有效参数:lIndex 模块索引值
出口返回参数:hHandle 模块的操作句柄(只有涉及中断时,返回才有意义)
返回值: 0 打开设备成功
-1 打开设备失败我是菜鸟,请各位大侠不吝赐教!急等!
最好有代码!
lIndex: LongInt;
hHandle: THandle;
nCh: SmallInt;
lData: LongInt;
plData: PLongInt;
lCode: LongInt;
end;
PZT = ^TZT;
老大能不能在详细一点点呢?谢谢谢谢了。这个类和DLL中的结构体有什么联系呢?
lIndex: LongInt;
hHandle: THandle;
nCh: SmallInt;
lData: LongInt;
plData: PLongInt;
lCode: LongInt;
end;
PZT = ^TZT;放哪了
要不不会编译不过的
interfaceuses ...;
type
TZT = package record
lIndex: LongInt;
hHandle: THandle;
nCh: SmallInt;
lData: LongInt;
plData: PLongInt;
lCode: LongInt;
end;
PZT = ^TZT;implementationfunction OpenUSB7kC(bs: PZT): integer;stcall; export;
而且我在用这个函数的时候参数应该怎么写呢?在程序里声明一下当作类使用吗?它和DLL里的那个结构体有什么关系呢?
type
//------這裹
TForm1 = class(TForm)放入:
TZT = package record
lIndex: LongInt;
hHandle: THandle;
nCh: SmallInt;
lData: LongInt;
plData: PLongInt;
lCode: LongInt;
end;
PZT = ^TZT;implementation
//--------------這裹
{$R *.dfm}放入:
function OpenUSB7kC(bs: PZT): integer;stcall; external 'xxx.dll';
老大给个实例吧
var ZT:TZT;
begin
.....//或者这里应该给ZT赋某些域的值
OpenUSB7kC(@ZT): //调用函数后,ZT就获得了值了。
end;
begin
GetMem(p,Sizeof(TZT));
P^.lIndex:=......
P^............
OpenUSB7kC(P):
......
FreeMem(P);
end;