www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Is it possible to make a library (dll/so) from separated .d files?

reply dog2002 <742617000027 aaathats3as.com> writes:
Hello. The title sounds weird, but I try to explain it better.

In Unreal Engine and Unity, source code files don't use main() 
and other important functions. They have only a class. Like this:

```
class SomeClass: someInterface
{
     AFunctionFromTheInterface1()
     {

     }

     AFunctionFromTheInterface2()
     {

     }
}
```

And then all the source code files will be compiled into a single 
.dll/.so library, so the game engine can use one in a game.

I don't know what compiler does Unreal Engine use, but it uses 
C++.

Is it possible to do so in D?
Apr 03 2023
next sibling parent dog2002 <742617000027 aaathats3as.com> writes:
On Monday, 3 April 2023 at 09:08:42 UTC, dog2002 wrote:
 Hello. The title sounds weird, but I try to explain it better.

 In Unreal Engine and Unity, source code files don't use main() 
 and other important functions. They have only a class. Like 
 this:

 ```
 class SomeClass: someInterface
 {
     AFunctionFromTheInterface1()
     {

     }

     AFunctionFromTheInterface2()
     {

     }
 }
 ```

 And then all the source code files will be compiled into a 
 single .dll/.so library, so the game engine can use one in a 
 game.

 I don't know what compiler does Unreal Engine use, but it uses 
 C++.

 Is it possible to do so in D?
There are examples of code here https://docs.unrealengine.com/5.1/en-US/unreal-engine-for-unity-developers/
Apr 03 2023
prev sibling parent reply Hipreme <msnmancini hotmail.com> writes:
On Monday, 3 April 2023 at 09:08:42 UTC, dog2002 wrote:
 Hello. The title sounds weird, but I try to explain it better.

 In Unreal Engine and Unity, source code files don't use main() 
 and other important functions. They have only a class. Like 
 this:

 ```
 class SomeClass: someInterface
 {
     AFunctionFromTheInterface1()
     {

     }

     AFunctionFromTheInterface2()
     {

     }
 }
 ```

 And then all the source code files will be compiled into a 
 single .dll/.so library, so the game engine can use one in a 
 game.

 I don't know what compiler does Unreal Engine use, but it uses 
 C++.

 Is it possible to do so in D?
Yes, actually, this is the very same approach I've done for my engine, since holding the main function I can take care of boring platform details. For doing that you'll need some way to make your main program know about your class. The way I do that is by defining another entry function which is always defined enemy you have a game project. You can take a look at https://github.com/MrcSnm/HipremeEngine/blob/66618c7783d62107bcaad393d5af5b86c9387b34/api/source/hip/api/package.d#L58 The user uses that engine mixin template, which will add the engine entry point to your game script, after that, whenever my engine loads the Dll, it will know what function to call and what scene it should spawn
Apr 03 2023
parent dog2002 <742617000027 aaathats3as.com> writes:
On Monday, 3 April 2023 at 11:29:12 UTC, Hipreme wrote:
 On Monday, 3 April 2023 at 09:08:42 UTC, dog2002 wrote:
 Hello. The title sounds weird, but I try to explain it better.

 In Unreal Engine and Unity, source code files don't use main() 
 and other important functions. They have only a class. Like 
 this:

 ```
 class SomeClass: someInterface
 {
     AFunctionFromTheInterface1()
     {

     }

     AFunctionFromTheInterface2()
     {

     }
 }
 ```

 And then all the source code files will be compiled into a 
 single .dll/.so library, so the game engine can use one in a 
 game.

 I don't know what compiler does Unreal Engine use, but it uses 
 C++.
https://github.com/MrcSnm/HipremeEngine/blob/66618c7783d62107bcaad393d5af5b86c9387b34/api/source/hip/api/package.d#L58
Thank you, looks almost what I need!
Apr 03 2023