我有一个VC++编写的DLL.VC++函数原型如下:
extern "C" LONG PASCAL EXPORT ReadAllRecord(HANDLE hCom,BYTE DevNo,BYTE RecordType,
LPDWORD pRecordCout)调用该函数后,需要得到pRecordCout的值。我在Delphi中的调用如下:
function ReadAllRecord(hcom:THandle;DevNo:Byte;RecordType:Byte;
pRecordCount:LPDWORD):Integer;stdcall;external 'JS168Comm.dll' name 'ReadAllRecord';
调用后,其他都正常。就是当我在代码里试图获取pRecordCount值时。系统给出错误提示:
Access violation at address 1000236C in module 'JS168Comm.dll'. Write of address 00000000.

解决方案 »

  1.   

    gzmhero(hihihi):procedure TForm1.Button1Click(Sender:TObject)
    var 
     p:LPDWORD;
     r:Integer;
     t:THandle;
     i:Byte;
    begin
     t:=Application.Handle;
     r:=ReadAllRecord(t,1,0,p);
    end;
      

  2.   

    p:LPDWord,是一个指针,r:=ReadAllRecord(t,1,0,p);这里对指针没有申请内存就进行了操作,所以会出现内存读写的异常。
    改一下:
    p:DWord;
    r:=ReadAllRecord(t,1,0,@p);
      

  3.   

    或者
    p:LPDWordgetmem(p,sizeof(DWOrd));
    r:=ReadAllRecord(t,1,0,p);
      

  4.   

    是这个问题!
    我一时把它忘了,没有给Pointer分配。谢谢gzmhero(hihihi)