Hi,
I have windows binary-only, third-party .DLL library without any source files. I would like to use it in my unix-based project, which is compiled with usual GNU C compiler. Wine documentation says Wine is able to load external .DLLs, but does not explain how to implement such ability in userland program using Wine API. I've discovered LoadLibrary() and GetProcAddr() functions compiled into built-in DLL (kernel32.dll.so), so in order to load my DLL I use the function LoadLibrary("somelib.dll"), linking my project with -lwine and -lkernel32.
The problem is that when my application calls LoadLibrary(), it causes Bus Error. Back tracing using gdb shows that the crash appears under such sequence:
in main() in LoadLibraryA() at module.c:745 in LoadLibraryExA() at module.c:706 in FILE_name_AtoW() at file.c:198 in ?? () from kernel32.dll.so
The function call at file.c:198 is RtlInitAnsiString() and (as I understand) is unreferenced in kernel32 and uses ntdll.dll.so.
What things should I do before calling LoadLibrary()?
By the way: If I call RtlInitAnsiString() directly from main(), linking my project with ntdll.dll.so, it is called correctly, works and returns some result.
I tried to define -lntdll within LDFLAGS, in this case compile finishes cleanly, but the Bus Error still appears.
Also I tried to find any examples showing how to load external .DLL. I've found no examples.
Note: there is no ability to obtain library sources.
Bye.