Hi all,

I'm trying to use __HrLoadAllImportsForDll with delay loading DLLs, but
I have not been able to make it work. I wonder if anyone could help me
please?

It seems that gcc makes an empty "Delay Import Directory" entry in the
data directory, so __HrLoadAllImportsForDll just fails with 8007007e
(The specified module could not be found).

Is there a way of convincing gcc to make this section? Is this a bug?
(I have "gcc.exe (rubenvb-4.6.3) 4.6.3").



Here's a way to reproduce the problem:

$ cat dll.c

int f(int x) {
    return x + 3;
}

int g(int x) {
    return x + 4;
}

$ gcc -c dll.c
$ cat delaydll.def

LIBRARY "dll.dll"

EXPORTS
    f
    g

$ dlltool -d delaydll.def -y delaydll.lib dll.o
$ gcc dll.o -o dll.dll -shared
$ cat test.c

#include <stdio.h>
#include <Windows.h>

int f(int x);
int g(int x);

int main(int argc, char **argv) {
    unsigned int i;
    i = __HrLoadAllImportsForDll("dll.dll");
    if (FAILED(i)) {
        printf("Delayed load failed %x\n", i);
        exit(1);
    }
    printf("Result: %d\n", f(5));
    printf("Result: %d\n", g(6));
    return 0;
}

$ gcc test.c delaydll.lib -o test
$ ./test
Delayed load failed 8007007e
$ objdump -p test.exe
[...]
The Data Directory
Entry 0 0000000000000000 00000000 Export Directory [.edata (or where ever we 
found it)]
Entry 1 0000000000009000 00000938 Import Directory [parts of .idata]
Entry 2 0000000000000000 00000000 Resource Directory [.rsrc]
Entry 3 0000000000006000 00000240 Exception Directory [.pdata]
Entry 4 0000000000000000 00000000 Security Directory
Entry 5 0000000000000000 00000000 Base Relocation Directory [.reloc]
Entry 6 0000000000000000 00000000 Debug Directory
Entry 7 0000000000000000 00000000 Description Directory
Entry 8 0000000000000000 00000000 Special Directory
Entry 9 000000000000b000 00000028 Thread Storage Directory [.tls]
Entry a 0000000000000000 00000000 Load Configuration Directory
Entry b 0000000000000000 00000000 Bound Import Directory
Entry c 000000000000924c 00000210 Import Address Table Directory
Entry d 0000000000000000 00000000 Delay Import Directory
Entry e 0000000000000000 00000000 CLR Runtime Header
Entry f 0000000000000000 00000000 Reserved
[...]



Thanks
Ian


------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to