Browse Source

* writing of .edata was wrong for indexes above number of exported items
* importing by index only did not work !

pierre 27 years ago
parent
commit
9cfedd8bb0
1 changed files with 17 additions and 4 deletions
  1. 17 4
      compiler/win_targ.pas

+ 17 - 4
compiler/win_targ.pas

@@ -275,13 +275,16 @@ unit win_targ;
                    importssection^.concat(new(pai_symbol,init_global(hp2^.func^)))
                    importssection^.concat(new(pai_symbol,init_global(hp2^.func^)))
                   else
                   else
                    importssection^.concat(new(pai_label,init(lcode)));
                    importssection^.concat(new(pai_label,init(lcode)));
-                  importssection^.concat(new(pai_const,init_rva(strpnew(lab2str(hp2^.lab)))));
+                   if hp2^.name^<>'' then
+                     importssection^.concat(new(pai_const,init_rva(strpnew(lab2str(hp2^.lab)))))
+                   else
+                     importssection^.concat(new(pai_const,init_32bit($80000000 or hp2^.ordnr)));
                   { finally the import information }
                   { finally the import information }
                   importssection^.concat(new(pai_section,init_idata(6)));
                   importssection^.concat(new(pai_section,init_idata(6)));
                   importssection^.concat(new(pai_label,init(hp2^.lab)));
                   importssection^.concat(new(pai_label,init(hp2^.lab)));
                   importssection^.concat(new(pai_const,init_16bit(hp2^.ordnr)));
                   importssection^.concat(new(pai_const,init_16bit(hp2^.ordnr)));
                   importssection^.concat(new(pai_string,init(hp2^.name^+#0)));
                   importssection^.concat(new(pai_string,init(hp2^.name^+#0)));
-
+                  importssection^.concat(new(pai_align,init_op(2,0)));
                   hp2:=pimported_item(hp2^.next);
                   hp2:=pimported_item(hp2^.next);
                 end;
                 end;
               hp1:=pimportlist(hp1^.next);
               hp1:=pimportlist(hp1^.next);
@@ -342,7 +345,10 @@ unit win_targ;
               while assigned(hp2) do
               while assigned(hp2) do
                 begin
                 begin
                    getlabel(plabel(hp2^.lab));
                    getlabel(plabel(hp2^.lab));
-                   importssection^.concat(new(pai_const,init_rva(strpnew(lab2str(hp2^.lab)))));
+                   if hp2^.name^<>'' then
+                     importssection^.concat(new(pai_const,init_rva(strpnew(lab2str(hp2^.lab)))))
+                   else
+                     importssection^.concat(new(pai_const,init_32bit($80000000 or hp2^.ordnr)));
                    hp2:=pimported_item(hp2^.next);
                    hp2:=pimported_item(hp2^.next);
                 end;
                 end;
               { finalize the names ... }
               { finalize the names ... }
@@ -387,6 +393,7 @@ unit win_targ;
                    { the ordinal number }
                    { the ordinal number }
                    importssection^.concat(new(pai_const,init_16bit(hp2^.ordnr)));
                    importssection^.concat(new(pai_const,init_16bit(hp2^.ordnr)));
                    importssection^.concat(new(pai_string,init(hp2^.name^+#0)));
                    importssection^.concat(new(pai_string,init(hp2^.name^+#0)));
+                   importssection^.concat(new(pai_align,init_op(2,0)));
                    hp2:=pimported_item(hp2^.next);
                    hp2:=pimported_item(hp2^.next);
                 end;
                 end;
               { create import dll name }
               { create import dll name }
@@ -521,6 +528,8 @@ unit win_targ;
          { no support for higher ordinal base yet !! }
          { no support for higher ordinal base yet !! }
          ordinal_base:=1;
          ordinal_base:=1;
          current_index:=ordinal_base;
          current_index:=ordinal_base;
+         { we must also count the holes !! }
+         entries:=ordinal_max-ordinal_base+1;
          
          
          exportssection^.concat(new(pai_section,init(sec_edata)));
          exportssection^.concat(new(pai_section,init(sec_edata)));
          { export flags }
          { export flags }
@@ -687,7 +696,11 @@ unit win_targ;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.17  1998-12-01 23:35:43  pierre
+  Revision 1.18  1998-12-02 10:26:13  pierre
+    * writing of .edata was wrong for indexes above number of exported items
+    * importing by index only did not work !
+
+  Revision 1.17  1998/12/01 23:35:43  pierre
    * alignment fixes
    * alignment fixes
 
 
   Revision 1.16  1998/11/30 13:26:26  pierre
   Revision 1.16  1998/11/30 13:26:26  pierre