我自己编写的动态库,编译成功,调用时断点跟踪返回结果正确,但是出现:
access violation at address 002346aa in moudule 'ICdll.dll',write of address on 00454658

解决方案 »

  1.   

    此类的错误我以前也经常碰到:(主要是下面的原因:我想)
    1: 在你 dll 里面有错误。
        如: dll里有个窗体 form1 ,在form1 上有个 query1 组件。
         在form1 还没有创建前是不能对query1进行操作的。否则会出错。
    最好要调试你的dll如果不行就把你的dll代码贴出来。
      

  2.   

    代码如下:
    library ICdll;uses
      ShareMem,
      SysUtils,
      Classes;{$R *.res}function CHexToBin;external 'aa.dll';
    function SingleDES;external 'Crwicc.dll';
    function fasan(card_num:string;key_num:string):string;stdcall;
    var
      card_data,key,back_data:array of byte;
      left_key,right_key,des_data1,des_data2,des_data3:array [0..7] of byte;
      i:integer;
      card_num1,subkey:string;
      dpk1:array of byte;
      abcd:variant;
    begin
      setlength(key,16*sizeof(byte));
      setlength(back_data,16*sizeof(byte));
      setlength(dpk1,16*sizeof(byte));
      setlength(card_data,8*sizeof(byte));
      card_num1:=copy(card_num,length(card_num)-15,16);
      CHexToBin(card_data[0],card_num1,length(card_num1));
      abcd:=card_data[0];
      chextobin(key[0],key_num,length(key_num));
      for i:=0 to 7 do
      begin
      left_key[i]:=key[i];
      end;
      singledes(1,left_key[0],8,card_data[0],des_data1[0]);
      singledes(2,right_key[0],8,des_data1[0],des_data2[0]);
      singledes(1,left_key[0],8,des_data2[0],des_data3[0]);
      
      for i:=0 to 7 do
        subkey:=subkey+inttohex(dpk1[i],2);
      result:=subkey;
    end;
    exports
      fasan;
    begin
    end.