www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to build dll?

reply Jack <jckj33 gmail.com> writes:
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?
Dec 02 2020
next sibling parent reply Jack <jckj33 gmail.com> writes:
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?
Dec 02 2020
parent Ferhat =?UTF-8?B?S3VydHVsbXXFnw==?= <aferust gmail.com> writes:
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?
Dec 02 2020
prev sibling next sibling parent =?UTF-8?B?0JLQuNGC0LDQu9C40Lkg0KTQsNC0?= =?UTF-8?B?0LXQtdCy?= writes:
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
Dec 03 2020
prev sibling parent frame <frame86 live.com> writes:
On Wednesday, 2 December 2020 at 19:42:37 UTC, Jack wrote:
 What am I missing?
As always... have you tired dmd -m32mscoff ?
Dec 03 2020