谢谢

解决方案 »

  1.   

    函数名称用Depends.exe可以看到,参数可不是一个简单的问题了。
      

  2.   

    程序有点麻烦,要看懂PE文件格式才行。
    http://vip.6to23.com/NowCan1/tech/pe.htm
      

  3.   

    给你一段DELPH的代码,一看你就明白,C的代码我现在找不到了。
    取得某一dll所有输出函数名
    在uses里加上ImageHlpprocedure ListDLLFunctions(DLLName: String; List: TStrings);
    type
      chararr = array [0..$FFFFFF] of Char;
      var
      H: THandle;
      I,
      fc: integer;
      st: string;
      arr: Pointer;
      ImageDebugInformation: PImageDebugInformation;
    begin
      List.Clear;
      DLLName := ExpandFileName(DLLName);
      if FileExists(DLLName) then
      begin
        H := CreateFile(PChar(DLLName), GENERIC_READ, FILE_SHARE_READ or
          FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
        if H<>INVALID_HANDLE_VALUE then
          try
            ImageDebugInformation := MapDebugInformation(H, PChar(DLLName), nil, 0);
            if ImageDebugInformation<>nil then
              try
                arr := ImageDebugInformation^.ExportedNames;
                fc := 0;
                for I := 0 to ImageDebugInformation^.ExportedNamesSize - 1 do
                  if chararr(arr^)[I]=#0 then
                  begin
                    st := PChar(@chararr(arr^)[fc]);
                    if Length(st)>0 then
                      List.Add(st);
                    if (I>0) and (chararr(arr^)[I-1]=#0) then
                      Break;
                    fc := I + 1
                  end
              finally
                UnmapDebugInformation(ImageDebugInformation)
              end
          finally
            CloseHandle(H)
          end
      end
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      List: TStrings;
      I: integer;
      S: String;begin
      List := TStringList.Create;  ListDLLFunctions('c:\windows\system\Abcsda.dll', List);
      showmessage(inttostr(list.count));
      S := 'List of functions';
      for I := 0 to List.Count - 1 do
        S := S + #13#10 + List[I];
      ShowMessage(S);  List.Free
    end;//rock 
      

  4.   

    原始类型几乎是不可能的,特别是指针类型的参数。
    看看这个
    http://vip.6to23.com/NowCan1/tech/dll_crk.htm