DLL Load Question: Please Help!
risky at mail.ru
Tue Feb 1 10:46:50 CST 2005
I have windows binary-only, third-party .DLL library without any source
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
program using Wine API. I've discovered LoadLibrary() and GetProcAddr()
functions compiled into built-in DLL (kernel32.dll.so), so in order to
DLL I use the function LoadLibrary("somelib.dll"), linking my project
-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
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
the Bus Error still appears.
Also I tried to find any examples showing how to load external .DLL.
I've found no
Note: there is no ability to obtain library sources.
More information about the wine-devel