how do i fix this node_dlang error?

Jack jckj33 at gmail.com
Mon Jun 7 02:33:38 UTC 2021


On Sunday, 6 June 2021 at 21:44:44 UTC, NotSpooky wrote:
> On Sunday, 6 June 2021 at 04:25:39 UTC, Jack wrote:
>> I'm trying to use the node_dlang pakckage but the code example 
>> from [this 
>> repo](https://github.com/NotSpooky/node_dlang/tree/v0.4.11/examples) isn't working
>>
>> the command ```dub build``` is fine but ```node example.js``` 
>> retuns an error saying the module.node is not a valid win32 
>> application. How do I fix this?
>>
>> [1]: 
>> https://github.com/NotSpooky/node_dlang/tree/v0.4.11/examples
>
> Hello, I'm the author of the library.

nice works, thanks for the library!

> Indeed I only tested it on 64-bit systems. I can try to make it 
> 32-bit compatible if needed.

for me i think it would be needed, i made everything 64bit so it 
at least compiled and ran.

> Aside from the auto-translated headers, in the case of Windows 
> the repo also includes node.lib compiled for 64-bit, so unless 
> the 32-bit version is added it will also give errors.
>
> I'm pretty sure it does work with electron as I have used it 
> myself.

I managed to compile the module and it passed this test:

```javascript
const nativeModule = require('./module.node');
const assert = require('assert');

assert(nativeModule.ultimate() == 42);
```

The D code looks like this:

```d
import std.stdio : stderr;
import node_dlang;

extern(C):

     void atStart(napi_env env)
     {
         import std.stdio;
     	writeln ("Hello from D!");
     }

     int ultimate()
     {
     	return 42;
     }

mixin exportToJs! (ultimate, MainFunction!atStart);
```

its builds sucessfully with ```dub``` no arguments (no 
--arch=x86_mscoff yet because it requires to fix other 
compilation error). The dub script looks like this:

     ```json
     {
     	"authors": [
     		"test"
     	],
     	"copyright": "Copyright © 2021, test",
     	"dependencies": {
     		"node_dlang": "~>0.4.11"
     	},
     	"description": "using electron from D",
     	"license": "proprietary",
     	"name": "eled",
     	"targetType": "dynamicLibrary",
     	"targetName" : "module.node",
     	"targetPath": "bin"
     }
     ```

then i test with node:

```
node test.js
```

it works fine. However, when I attempt to use it in the prescript 
within electron, I get this error:

```
A JavaScript error occured in the browser process
---------------------------
Uncaught Exception:
Error: A dynamic link library (DLL) initialization routine failed.

     \\?\C:\Users\001\Desktop\ele\module.node
         at process.func [as dlopen] (VM70 asar_bundle.js:5)
         at Object.Module._extensions..node (VM43 loader.js:1138)
         at Object.func [as .node] (VM70 asar_bundle.js:5)
         at Module.load (VM43 loader.js:935)
         at Module._load (VM43 loader.js:776)
         at Function.f._load (VM70 asar_bundle.js:5)
         at Function.o._load (VM75 renderer_init.js:33)
         at Module.require (VM43 loader.js:959)
         at require (VM50 helpers.js:88)
         at Object.<anonymous> (VM88 
C:\Users\001\Desktop\ele\preload.js:6)
     ```

the lines of this in the prescript goes like this:

```javascript
const nativeModule = require('./module.node');
const assert = require('assert');

assert(nativeModule.ultimate() == 42);
```

What am I missing?


More information about the Digitalmars-d-learn mailing list