我现在想用DELPHI把对EZUSB设备的打开和读写操作编成DLL的函数
我自己写的一个dll,现在老是出现:转着转着,突然机器就重启了
如果不用dll,直接在应用程序中用deviceiocontrol(...)那几个函数,都没有问题
改成dll就老是重启了 ,偶尔出现蓝屏,好像是说内存什么地址出错 ,多数情况是不打招呼就重启了
不知道哪位碰到过类似的问题没有?
是我的机器有问题,还是我的dll写的有问题?

解决方案 »

  1.   

    是的DLL有问题.应该是内存操作有问题.是不是在调用以后没有释放?
      

  2.   

    问题应该就在这里
    var
      PacketSize: WORD;
      BufferData: array[0..63] of uchar;//我想一次性读64字节,放到这个数组里
      nBytes: ulong;function ReadData(hDriver: THandle): boolean; stdcall;
    var
      bulkControl: BULK_TRANSFER_CONTROL;
      i: integer;
    begin
      for i:= 0 to 63 do
        BufferData[i]:= 0;
      bulkControl.pipeNum:= 0;
      PacketSize:= 64;
      Result:= DeviceIoControl(hDriver,
                               IOCTL_Ezusb_BULK_READ,
                               @bulkControl,
                               SizeOf(BULK_TRANSFER_CONTROL),
                               @BufferData,
                               PacketSize,
                               nBytes,
                               nil);
    end;function PullOut(iIndex: integer): Uchar; stdcall;//想在应用程序中通过这个函数
    把数组的内容导出来,是不是不能这么干啊?
    begin
      result:= BufferData[iIndex];
    end;
      

  3.   

    我也碰到过这种情况,是dll的问题造成的。