SDK VC++ DLL的函数原型DLLEXPORT_API int __stdcall RegisterImageStreamCallback(IMAGE_STREAM_CALLBACK ImageStreamCallback,void *context);
其中 IMAGE_STREAM_CALLBACK 是回调函数 
函数原型:
typedef int (*STREAM_DIRECT_READ_CALLBACK)(ULONG channelNumber,void *DataBuf,DWORD Length,int FrameType,void *context);我的调用
procedure  MyCallBack(channelNumber:ULONG;DataBuf:PChar;Length:DWORD;FrameType:Integer;context:Pointer);stdcall;
begin
//回调函数
end;现在是数据出来,但是执行完end后就出现"access violation at addr"错误,郁闷死,请高手帮我看看,是不是类型转换还是其他什么错误呀

解决方案 »

  1.   

    我发现我调用所有回调类的函数都会出现这个错误,我换个delphi版本看看
      

  2.   

    context:Pointer>???
    可能是这个没处理好吧
      

  3.   

    函数原型: 
    typedef int (*STREAM_DIRECT_READ_CALLBACK)(ULONG channelNumber,void *DataBuf,DWORD Length,int FrameType,void *context); 
    --------------------------------------------------------------------------------------------------------------------------
    1,你上面给的原形定义的是一个返回值为integer的函数,你定义的是一个过程,即在c++中就变成了一个返回为void(空)的函数,明显对应不上了;2,我认为,可能是你的"stdcall"惹的货,我看你给的原形并没有指明这个回调函数是stdcall的,而cdecl是C和C++默认方式,你可以改成cdecl试一下!
    procedure  MyCallBack(channelNumber:ULONG;DataBuf:PChar;Length:DWORD;FrameType:Integer;context:Pointer);cdecl; 
    begin 
    //回调函数 
    end;3,你给的函数原型是"STREAM_DIRECT_READ_CALLBACK",并非这里需要的"IMAGE_STREAM_CALLBACK",我不知道你是否确定他们都是一样的!:)
      

  4.   

    function STREAM_DIRECT_READ_CALLBACK (ChannelNum:ULONG;var Databuf:byte;Length:DWORD;frameType:integer;context:pointer):integer;cdecl;(正确定义前几个星期恰好用过了)