Thread overview
How to build dll?
Dec 02, 2020
Jack
Dec 02, 2020
Jack
Dec 02, 2020
Ferhat Kurtulmuş
Dec 03, 2020
frame
December 02, 2020
D code:

>import core.sys.windows.dll;
>
> mixin SimpleDllMain;
>
>version(Windows) extern(C) export
>int foo() { return 42; }

compiled with:
> dmd -ofmydll.dll -shared -m32 dll.d

called from:

>typedef int (__cdecl *MYPROC)(void);
> 
>int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
>               PWSTR szCmdLine, int CmdShow)
>{
>    HINSTANCE hinstLib;
>    MYPROC ProcAdd;
>    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
> 
>    // Get a handle to the DLL module.
> 
>    hinstLib = LoadLibrary(TEXT("mydll.dll"));


but hinstLib is NULL and GetLastError() = 193:

> ERROR_BAD_EXE_FORMAT 193 (0xC1)
> %1 is not a valid Win32 application.

What am I missing?
December 02, 2020
On Wednesday, 2 December 2020 at 19:42:37 UTC, Jack wrote:
> D code:
>
>>import core.sys.windows.dll;
>>
>> mixin SimpleDllMain;
>>
>>version(Windows) extern(C) export
>>int foo() { return 42; }
>
> compiled with:
>> dmd -ofmydll.dll -shared -m32 dll.d
>
> called from:
>
>>typedef int (__cdecl *MYPROC)(void);
>> 
>>int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
>>               PWSTR szCmdLine, int CmdShow)
>>{
>>    HINSTANCE hinstLib;
>>    MYPROC ProcAdd;
>>    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
>> 
>>    // Get a handle to the DLL module.
>> 
>>    hinstLib = LoadLibrary(TEXT("mydll.dll"));
>
>
> but hinstLib is NULL and GetLastError() = 193:
>
>> ERROR_BAD_EXE_FORMAT 193 (0xC1)
>> %1 is not a valid Win32 application.
>
> What am I missing?

for same reason, the dll build with ldc2 works fine, compiled with:

>ldc2 -shared dll.d -ofmydll.dll

what am I missing?
December 02, 2020
On Wednesday, 2 December 2020 at 20:08:29 UTC, Jack wrote:
> On Wednesday, 2 December 2020 at 19:42:37 UTC, Jack wrote:
>> D code:
>>
>>>[...]
>>
>> compiled with:
>>> [...]
>>
>> called from:
>>
>>>    [...]
>>
>>
>> but hinstLib is NULL and GetLastError() = 193:
>>
>>> [...]
>>
>> What am I missing?
>
> for same reason, the dll build with ldc2 works fine, compiled with:
>
>>ldc2 -shared dll.d -ofmydll.dll
>
> what am I missing?

Just out of curiosity, are you sure that you compile both your c and d codes for the same arc?
December 03, 2020
On Wednesday, 2 December 2020 at 19:42:37 UTC, Jack wrote:
> D code:
>
>>import core.sys.windows.dll;
>>
>> mixin SimpleDllMain;
>>
>>version(Windows) extern(C) export
>>int foo() { return 42; }
>
> compiled with:
>> dmd -ofmydll.dll -shared -m32 dll.d
>
> called from:
>
>>typedef int (__cdecl *MYPROC)(void);
>> 
>>int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
>>               PWSTR szCmdLine, int CmdShow)
>>{
>>    HINSTANCE hinstLib;
>>    MYPROC ProcAdd;
>>    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
>> 
>>    // Get a handle to the DLL module.
>> 
>>    hinstLib = LoadLibrary(TEXT("mydll.dll"));
>
>
> but hinstLib is NULL and GetLastError() = 193:
>
>> ERROR_BAD_EXE_FORMAT 193 (0xC1)
>> %1 is not a valid Win32 application.
>
> What am I missing?

May be this will help: https://github.com/vitalfadeev/dlang-dll
December 03, 2020
On Wednesday, 2 December 2020 at 19:42:37 UTC, Jack wrote:
> What am I missing?

As always... have you tired dmd -m32mscoff ?