我怎么老调不成功 
TFILE_OPEN_CALLBACK = procedure(filepath:PAnsichar) of object;stdcall;
class里面
procedure Open_Callback2(filepath:PAnsichar);stdcall;vc里面:
typedef void  (CALLBACK* FILE_OPEN_CALLBACK)(LPCSTR pFilePath);请高手指点

解决方案 »

  1.   

    delphi调用dll(vc)?
    delphi调用dll(delphi)?
      

  2.   

    回调函数为类方法时, 需要使用比较特殊的办法来实现。在你的工程中增加以下代码:type
      TCallbackInstance = array [1..18] of Byte;procedure MakeCallbackInstance(var Instance: TCallbackInstance;  ObjectAddr: Pointer;  FunctionAddr: Pointer);
    const CallbackCode: TCallbackInstance =
      ($8B,$04,$24,$50,$B8,$00,$00,$00,$00,$89,$44,$24,$04,$E9,$00,$00,$00,$00);
      {----------------------------}
      {    MOV EAX, [ESP];         }
      {    PUSH EAX;               }
      {    MOV EAX, ObjectAddr;    }
      {    MOV [ESP+4], EAX;       }
      {    JMP FunctionAddr;       }
      {----------------------------}
    begin
      Move(CallbackCode, Instance, SizeOf(TCallbackInstance));
      PInteger(@Instance[6])^ := Integer(ObjectAddr);
      PInteger(@Instance[15])^ := Integer(Integer(FunctionAddr) - Integer(@Instance) - 18);
    end;1.在类中申明一个TCallbackInstance类型的变量A
    2.调用MakeCallbackInstance函数来初始化变量A, MakeCallbackInstance(A, Self, 类名.回调函数名)
    3.将变量A当成回调函数来作为回调初始化函数的参数
      

  3.   

    修正一下:
    1.在类中申明一个TCallbackInstance类型的变量A
    2.调用MakeCallbackInstance函数来初始化变量A, MakeCallbackInstance(A, Self, @类名.回调函数名);
    3.将变量A当成回调函数来作为回调初始化函数的参数
      

  4.   

    在单核CPU,32位操作系统win2003, 1G的电脑上没有问题,可是在4核CPU,8G内存,32位操作系统win2003,就老是非法
    我的QQ是117563781,也单核,1G内存下面没有问题