On Sat, 30 Apr 2011 13:47:53 +0400, maarten van damme <[email protected]> wrote:

I've changed this, I think I'm still kinda confused with lib files. They've
told me you can't do something with them without a .di file
So I went ahead and made a kernel33.di file. I now import it in kernel32.d
and my declaration is
System(C){
export void * exportedfunctionblablabal(){
   return exportedfunctionblablablal();
}
...
}

The file in the directory are:
kernel32.d : http://dl.dropbox.com/u/15024434/d/kernel32.d
kernel33.di : http://dl.dropbox.com/u/15024434/d/kernel33.di
kernel33.lib : http://dl.dropbox.com/u/15024434/d/kernel33.lib
kernel33.dll : http://dl.dropbox.com/u/15024434/d/kernel33.dll

I've tried to compile using dmd -d kernel32.d kernel33.di kernel33.lib but
it throws errors like
"Error 42: Symbol undifined _Dkernel1336_hreadfzpV"
I have literally no clue why this is the case, can someone help me out or
look at the files?

2011/4/27 maarten van damme <[email protected]>

I'm afraid I've been a little unclear.
I've copied kernel32.dll from the windows dir, renamed it to kernel33.dll
and generated a .lib from it using implib.
Then I've created a d file with a correct dllmain(stolen from examples) and
between

system(C){
export void * exportedfunctionfromkernel33.dll();
export void * exportedfunction2fromkernel33.dll();
...
}

But it looks like you can't both declare a function from another lib and
export it at the same time.


In your kernel33.di, try making it extern (C) export void* _hread(); etc. You functions get D mangling otherwise.

I'd also suggest you to start with a less complex example, e.g. export only one function, make sure it works, then add the rest.

If you think your .lib files doesn't do its job, try using .def file instead. I find them extremely helpful, and they are a lot easier to edit/extend.

Hope that helps.

Reply via email to