Re: Pass reference to void*

2019-01-09 Thread Andre Pany via Digitalmars-d-learn

On Wednesday, 9 January 2019 at 18:37:57 UTC, Stefan Koch wrote:

On Monday, 7 January 2019 at 13:15:44 UTC, Andre Pany wrote:

On Monday, 7 January 2019 at 13:01:57 UTC, Stefan Koch wrote:

On Monday, 7 January 2019 at 12:19:57 UTC, Andre Pany wrote:

[...]


From the function declaration &model seems to be the correct 
thing to use here.

Have you checked that Open is not null ?


Yes, Open is not null and the strange thing is, everything is 
working fine for

DMD on windows. (I call a lot other dll functions afterwards).
By switching to LDC the subsequent calls to DLL functions are 
failing.


Thanks.

Kind regards
André


Might be an calling convention issue?

Are they declared with extern(Windows) ?


I finally got it solved. The d coding was right. There was an 
error in the dll which caused an issue for LDC on Windows.
The SO (linux) I got working by chance. The SO has some 
dependencies to a system package. After installing this package 
by chance on my Alpine, the cryptic error message disappeared and 
everything works fine.


Kind regards
Andre


Re: Pass reference to void*

2019-01-09 Thread Stefan Koch via Digitalmars-d-learn

On Monday, 7 January 2019 at 13:15:44 UTC, Andre Pany wrote:

On Monday, 7 January 2019 at 13:01:57 UTC, Stefan Koch wrote:

On Monday, 7 January 2019 at 12:19:57 UTC, Andre Pany wrote:

[...]


From the function declaration &model seems to be the correct 
thing to use here.

Have you checked that Open is not null ?


Yes, Open is not null and the strange thing is, everything is 
working fine for

DMD on windows. (I call a lot other dll functions afterwards).
By switching to LDC the subsequent calls to DLL functions are 
failing.


Thanks.

Kind regards
André


Might be an calling convention issue?

Are they declared with extern(Windows) ?


Re: Pass reference to void*

2019-01-07 Thread Andre Pany via Digitalmars-d-learn

On Monday, 7 January 2019 at 13:01:57 UTC, Stefan Koch wrote:

On Monday, 7 January 2019 at 12:19:57 UTC, Andre Pany wrote:

Hi,

I call a C function from a dll (SO on linux). While the 
following code works
fine for DMD on windows, there are strange errors for LDC on 
windows. Also the equivalent code does not work for DMD/LDC on 
linux.
(When calling other functions from the dll and passing the 
model reference, this functions are failing).


[...]


From the function declaration &model seems to be the correct 
thing to use here.

Have you checked that Open is not null ?


Yes, Open is not null and the strange thing is, everything is 
working fine for

DMD on windows. (I call a lot other dll functions afterwards).
By switching to LDC the subsequent calls to DLL functions are 
failing.


Thanks.

Kind regards
André


Re: Pass reference to void*

2019-01-07 Thread Stefan Koch via Digitalmars-d-learn

On Monday, 7 January 2019 at 12:19:57 UTC, Andre Pany wrote:

Hi,

I call a C function from a dll (SO on linux). While the 
following code works
fine for DMD on windows, there are strange errors for LDC on 
windows. Also the equivalent code does not work for DMD/LDC on 
linux.
(When calling other functions from the dll and passing the 
model reference, this functions are failing).


[...]


From the function declaration &model seems to be the correct 
thing to use here.

Have you checked that Open is not null ?


Pass reference to void*

2019-01-07 Thread Andre Pany via Digitalmars-d-learn

Hi,

I call a C function from a dll (SO on linux). While the following 
code works
fine for DMD on windows, there are strange errors for LDC on 
windows. Also the equivalent code does not work for DMD/LDC on 
linux.
(When calling other functions from the dll and passing the model 
reference, this functions are failing).


Function "Open" gets a path to a model and return via argument 
pModel the reference.
I am not 100% sure whether I call function Open correctly in 
regards to the pModel

argument.

extern(C) nothrow @nogc
{
alias Model = void*;

	alias da_Open = Status function(const(char)* path, Model* 
pModel);

}

__gshared {
da_Open Open;
}

Open = cast(da_Open) GetProcAddress(h, "Open");
Model model;
string modelFilePath = "...";

auto status = Open(modelFilePath.toStringz, &model);

Is &model correct?

Kind regards
André