Missing JUCE_API


#21

I hope too, thanks for your reactivity


#22

Hi !

It seems that JUCE_API is missing on class WindowsRegistry definition
in /modules/juce_core/misc/juce_WindowsRegistry.h file.

Thanks in advance for this change.


#23

Hi !

It seems that JUCE_API is missing on the two internal class Listener of class MPEInstrument and MPEZoneLayout

Respectivelly in

modules\juce_audio_basics\mpe\juce_MPEInstrument.h line 233

and

modules\juce_audio_basics\mpe\juce_MPEZoneLayout.h at line 132
 

Thanks in advance for this change.


#24

Thanks. (I'll actually make them inline rather than adding the export definition, but that should also work)


#25

Unfortunately, with your last fix, Visual Studio is still complaining when a JUCE_API class intheriting from a non JUCE_API interface.

Inlined or not.

warning C4275: non dll-interface class 'juce::MPEInstrument::Listener' used as base for dll-interface struct 'juce::MPESynthesiserBase'

I think JUCE_API must be set. As your twelve other Listner class does.

Thanks again for your reactivity.

 


#26

We actually have many Listener classes that don't use the flag, so I did it like this to match those.

Not sure why VS has a problem with this, the code is perfectly legit, but <sigh> will add the flag...


#27

I understand your disappointment about this ugly dllexport syntax...

Listener who must avoid JUCE_API are template based.

Non template Listener without JUCE_API are without warning when inherited only by non JUCE_API internal Juce class.

 

Thanks again for this !

 

 

 


#28

Hi !

I just found some extra missing JUCE_API in OpenGL module:
This will allow OpenGLAppExample to link with Juce build in DLL.

in juce_OpenGLAppComponent.h line 37 for the OpenGLAppComponent class.
in juce_OpenGLShaderProgram line 128 for the OpenGLShaderProgram::Uniform struct
in juce_OpenGLShaderProgram line 173 for the OpenGLShaderProgram::Attribute struct.

Thanks in advance for this.


#29

Hi !

Add JUCE_API to RelativeTime’s global operators would be welcome !

Thanks in advance for this !


#30

Sure, will add those, ta!


#31

…umm, hang on, static methods like that don’t need the JUCE_API flag. Do you mean JUCE_CALLTYPE?


#32

In fact you are right, for proper Windows DLL build we need both of them,
Like it was already done for juce::String ones.

Thanks a lot for your incredible reactivity.


#33

No… the functions in String.h are free functions, not methods like the RelativeTime ones.

IIRC JUCE_CALLTYPE is actually only needed for RTAS builds on Windows, so unnecessary here. And JUCE_API is already applied to the RelativeTime class itself, so isn’t needed on its static methods.

What problems are you actually seeing to have asked this question?


#34

ok, sorry, just realised that you’re talking about the operators, I assumed you meant the static methods… Doh. OK, will sort that out!


#35

Thanks for this Quick fix !
Sorry to do not sending you all of the following missing JUCE_API in one shot:

Here another related change:

in juce_ModalComponentManager.h class Callback inside ModalComponentManager line 52 should also benefit from JUCE_API.

Those ones are still missing:

in juce_OpenGLAppComponent.h line 37 for the OpenGLAppComponent class.
in juce_OpenGLShaderProgram line 128 for the OpenGLShaderProgram::Uniform struct
in juce_OpenGLShaderProgram line 173 for the OpenGLShaderProgram::Attribute struct.

Thanks in advance for all of this.


#36

Hi !

I discover two missing JUCE_API for Windows DLL build in
juce_core/network/juce_URL.h

line 352: class JUCE_API DownloadTask
and line 356: struct JUCE_API Listener

Many thanks in advance for those fixes
All the best


#37

Thanks for reporting!


#38

You are welcome,
Many thanks for your reactivity.
Regards