哦,刚才回过头去又看了一遍,这下子看清了,pcchReaders是IN OUT的,也就是说传入传出的,那么赋初值就很有必要啦
SCardListReadersA(
IN SCARDCONTEXT hContext,
IN LPCSTR mszGroups,
OUT LPSTR mszReaders,
IN OUT LPDWORD pcchReaders);
我用数组来试了一下我的DLL中的函数调用
var
DecryptData : array[0..1023] of byte;
begin
ZeroMemory(@DecryptData, SizeOf(DecryptData))
//在赋零值的情况下是可以正常调用的,我想大慨原因在于,以我这个例子说,假设没有赋初值,那么有时在从函数中获取值时,如果能取回来的有满1024位时,他就是正常的,如果没有返回来1024位,在这样的情况下,数组中只有部份是有数据的,而部份是空的,你再读的话,就有可能出错了。
result := XC_RSADecrypt(ih, PBuff, PBuffLen,@DecryptData, DLen, KeyType);
if result = XCR_OK then
可能是字节对齐的原因:
使用数据结构+指针的联合效果不错!--至今,没有错过!
对于数组得指针,需要转化类如
var
TestArray: Array of Integer;
TestPointchar;
begin
setlength(TestArray,100);
TestDLL(TestPoint,@(TestArray[0]));//假设这是一个动态调用函数,
//注意TestArray[0]的用法!
end;