LMMS
Loading...
Searching...
No Matches
ipluginbase.h
Go to the documentation of this file.
1//-----------------------------------------------------------------------------
2// Project : SDK Core
3//
4// Category : SDK Core Interfaces
5// Filename : pluginterfaces/base/ipluginbase.h
6// Created by : Steinberg, 01/2004
7// Description : Basic Plug-in Interfaces
8//
9//-----------------------------------------------------------------------------
10// This file is part of a Steinberg SDK. It is subject to the license terms
11// in the LICENSE file found in the top-level directory of this distribution
12// and at www.steinberg.net/sdklicenses.
13// No part of the SDK, including this file, may be copied, modified, propagated,
14// or distributed except according to the terms contained in the LICENSE file.
15//-----------------------------------------------------------------------------
16
17#pragma once
18
19#include "funknown.h"
20#include "fstrdefs.h"
21
22namespace Steinberg {
23
24//------------------------------------------------------------------------
36class IPluginBase: public FUnknown
37{
38public:
39//------------------------------------------------------------------------
43 virtual tresult PLUGIN_API initialize (FUnknown* context) = 0;
44
47 virtual tresult PLUGIN_API terminate () = 0;
48
49//------------------------------------------------------------------------
50 static const FUID iid;
51};
52
53DECLARE_CLASS_IID (IPluginBase, 0x22888DDB, 0x156E45AE, 0x8358B348, 0x08190625)
54
55
56//------------------------------------------------------------------------
61{
62//------------------------------------------------------------------------
71
72 enum
73 {
74 kURLSize = 256,
77 };
78
79//------------------------------------------------------------------------
84//------------------------------------------------------------------------
85 PFactoryInfo (const char8* _vendor, const char8* _url, const char8* _email, int32 _flags)
86 {
87 strncpy8 (vendor, _vendor, kNameSize);
88 strncpy8 (url, _url, kURLSize);
89 strncpy8 (email, _email, kEmailSize);
90 flags = _flags;
91#ifdef UNICODE
92 flags |= kUnicode;
93#endif
94 }
95#if SMTG_CPP11
96 constexpr PFactoryInfo () : vendor (), url (), email (), flags () {}
97#else
98 PFactoryInfo () { memset (this, 0, sizeof (PFactoryInfo)); }
99#endif
100};
101
102//------------------------------------------------------------------------
107{
108//------------------------------------------------------------------------
110 {
111 kManyInstances = 0x7FFFFFFF
112 };
113
114 enum
115 {
118 };
119//------------------------------------------------------------------------
124//------------------------------------------------------------------------
125
126 PClassInfo (const TUID _cid, int32 _cardinality, const char8* _category, const char8* _name)
127 {
128 memset (this, 0, sizeof (PClassInfo));
129 memcpy (cid, _cid, sizeof (TUID));
130 if (_category)
131 strncpy8 (category, _category, kCategorySize);
132 if (_name)
133 strncpy8 (name, _name, kNameSize);
134 cardinality = _cardinality;
135 }
136#if SMTG_CPP11
137 constexpr PClassInfo () : cid (), cardinality (), category (), name () {}
138#else
139 PClassInfo () { memset (this, 0, sizeof (PClassInfo)); }
140#endif
141};
142
143//------------------------------------------------------------------------
144// IPluginFactory interface declaration
145//------------------------------------------------------------------------
159{
160public:
161//------------------------------------------------------------------------
163 virtual tresult PLUGIN_API getFactoryInfo (PFactoryInfo* info) = 0;
164
167 virtual int32 PLUGIN_API countClasses () = 0;
168
170 virtual tresult PLUGIN_API getClassInfo (int32 index, PClassInfo* info) = 0;
171
173 virtual tresult PLUGIN_API createInstance (FIDString cid, FIDString _iid, void** obj) = 0;
174
175//------------------------------------------------------------------------
176 static const FUID iid;
177};
178
179DECLARE_CLASS_IID (IPluginFactory, 0x7A4D811C, 0x52114A1F, 0xAED9D2EE, 0x0B43BF9F)
180
181
182//------------------------------------------------------------------------
187{
188//------------------------------------------------------------------------
193
194 enum {
198 };
199
205
206//------------------------------------------------------------------------
207
208 PClassInfo2 (const TUID _cid, int32 _cardinality, const char8* _category, const char8* _name,
209 int32 _classFlags, const char8* _subCategories, const char8* _vendor, const char8* _version,
210 const char8* _sdkVersion)
211 {
212 memset (this, 0, sizeof (PClassInfo2));
213 memcpy (cid, _cid, sizeof (TUID));
214 cardinality = _cardinality;
215 if (_category)
217 if (_name)
219 classFlags = static_cast<uint32> (_classFlags);
220 if (_subCategories)
221 strncpy8 (subCategories, _subCategories, kSubCategoriesSize);
222 if (_vendor)
223 strncpy8 (vendor, _vendor, kVendorSize);
224 if (_version)
225 strncpy8 (version, _version, kVersionSize);
226 if (_sdkVersion)
227 strncpy8 (sdkVersion, _sdkVersion, kVersionSize);
228 }
229#if SMTG_CPP11
230 constexpr PClassInfo2 ()
231 : cid ()
232 , cardinality ()
233 , category ()
234 , name ()
235 , classFlags ()
236 , subCategories ()
237 , vendor ()
238 , version ()
239 , sdkVersion ()
240 {
241 }
242#else
243 PClassInfo2 () { memset (this, 0, sizeof (PClassInfo2)); }
244#endif
245};
246
247//------------------------------------------------------------------------
248// IPluginFactory2 interface declaration
249//------------------------------------------------------------------------
255{
256public:
257//------------------------------------------------------------------------
259 virtual tresult PLUGIN_API getClassInfo2 (int32 index, PClassInfo2* info) = 0;
260
261//------------------------------------------------------------------------
262 static const FUID iid;
263};
264DECLARE_CLASS_IID (IPluginFactory2, 0x0007B650, 0xF24B4C0B, 0xA464EDB9, 0xF00B2ABB)
265
266
267//------------------------------------------------------------------------
271{
272//------------------------------------------------------------------------
277
278 enum {
282 };
283
289
290//------------------------------------------------------------------------
291 PClassInfoW (const TUID _cid, int32 _cardinality, const char8* _category, const char16* _name,
292 int32 _classFlags, const char8* _subCategories, const char16* _vendor, const char16* _version,
293 const char16* _sdkVersion)
294 {
295 memset (this, 0, sizeof (PClassInfoW));
296 memcpy (cid, _cid, sizeof (TUID));
297 cardinality = _cardinality;
298 if (_category)
300 if (_name)
302 classFlags = static_cast<uint32> (_classFlags);
303 if (_subCategories)
304 strncpy8 (subCategories, _subCategories, kSubCategoriesSize);
305 if (_vendor)
306 strncpy16 (vendor, _vendor, kVendorSize);
307 if (_version)
308 strncpy16 (version, _version, kVersionSize);
309 if (_sdkVersion)
310 strncpy16 (sdkVersion, _sdkVersion, kVersionSize);
311 }
312#if SMTG_CPP11
313 constexpr PClassInfoW ()
314 : cid ()
315 , cardinality ()
316 , category ()
317 , name ()
318 , classFlags ()
319 , subCategories ()
320 , vendor ()
321 , version ()
322 , sdkVersion ()
323 {
324 }
325#else
326 PClassInfoW () { memset (this, 0, sizeof (PClassInfoW)); }
327#endif
328
342};
343
344//------------------------------------------------------------------------
345// IPluginFactory3 interface declaration
346//------------------------------------------------------------------------
352{
353public:
354//------------------------------------------------------------------------
356 virtual tresult PLUGIN_API getClassInfoUnicode (int32 index, PClassInfoW* info) = 0;
357
359 virtual tresult PLUGIN_API setHostContext (FUnknown* context) = 0;
360
361//------------------------------------------------------------------------
362 static const FUID iid;
363};
364DECLARE_CLASS_IID (IPluginFactory3, 0x4555A2AB, 0xC1234E57, 0x9B122910, 0x36878931)
365//------------------------------------------------------------------------
366} // namespace Steinberg
367
368//------------------------------------------------------------------------
369#define LICENCE_UID(l1, l2, l3, l4) \
370{ \
371 (int8)((l1 & 0xFF000000) >> 24), (int8)((l1 & 0x00FF0000) >> 16), \
372 (int8)((l1 & 0x0000FF00) >> 8), (int8)((l1 & 0x000000FF) ), \
373 (int8)((l2 & 0xFF000000) >> 24), (int8)((l2 & 0x00FF0000) >> 16), \
374 (int8)((l2 & 0x0000FF00) >> 8), (int8)((l2 & 0x000000FF) ), \
375 (int8)((l3 & 0xFF000000) >> 24), (int8)((l3 & 0x00FF0000) >> 16), \
376 (int8)((l3 & 0x0000FF00) >> 8), (int8)((l3 & 0x000000FF) ), \
377 (int8)((l4 & 0xFF000000) >> 24), (int8)((l4 & 0x00FF0000) >> 16), \
378 (int8)((l4 & 0x0000FF00) >> 8), (int8)((l4 & 0x000000FF) ) \
379}
380
381//------------------------------------------------------------------------
382// GetPluginFactory
383//------------------------------------------------------------------------
421extern "C"
422{
423 SMTG_EXPORT_SYMBOL Steinberg::IPluginFactory* PLUGIN_API GetPluginFactory ();
424 typedef Steinberg::IPluginFactory* (PLUGIN_API *GetFactoryProc) ();
425}
Definition funknown.h:233
Definition funknown.h:361
Definition ipluginbase.h:37
static const FUID iid
Definition ipluginbase.h:50
virtual tresult PLUGIN_API terminate()=0
virtual tresult PLUGIN_API initialize(FUnknown *context)=0
Definition ipluginbase.h:255
static const FUID iid
Definition ipluginbase.h:262
virtual tresult PLUGIN_API getClassInfo2(int32 index, PClassInfo2 *info)=0
Definition ipluginbase.h:352
static const FUID iid
Definition ipluginbase.h:362
virtual tresult PLUGIN_API getClassInfoUnicode(int32 index, PClassInfoW *info)=0
virtual tresult PLUGIN_API setHostContext(FUnknown *context)=0
Definition ipluginbase.h:159
virtual tresult PLUGIN_API getClassInfo(int32 index, PClassInfo *info)=0
virtual int32 PLUGIN_API countClasses()=0
virtual tresult PLUGIN_API getFactoryInfo(PFactoryInfo *info)=0
static const FUID iid
Definition ipluginbase.h:176
virtual tresult PLUGIN_API createInstance(FIDString cid, FIDString _iid, void **obj)=0
#define DECLARE_CLASS_IID(ClassName, l1, l2, l3, l4)
Definition funknown.h:74
static const char * name
Definition pugl.h:1582
SMTG_EXPORT_SYMBOL Steinberg::IPluginFactory *PLUGIN_API GetPluginFactory()
Steinberg::IPluginFactory *(PLUGIN_API * GetFactoryProc)()
Definition ipluginbase.h:424
struct backing_store_struct * info
Definition jmemsys.h:183
int version
Definition jpeglib.h:901
Definition baseiids.cpp:43
int16 char16
Definition ftypes.h:101
int int32
Definition ftypes.h:50
void str8ToStr16(char16 *dst, const char8 *src, int32 n=-1)
Definition fstrdefs.h:250
char char8
Definition ftypes.h:93
int8 TUID[16]
plain UID type
Definition funknown.h:210
const char8 * FIDString
Definition ftypes.h:117
char16 * strncpy16(char16 *dest, const char16 *source, uint32 count)
Definition fstrdefs.h:228
char8 * strncpy8(char8 *dest, const char8 *source, uint32 count)
Definition fstrdefs.h:227
int32 tresult
Definition ftypes.h:76
unsigned int uint32
Definition ftypes.h:51
Definition ipluginbase.h:187
char8 version[kVersionSize]
Version string (e.g. "1.0.0.512" with Major.Minor.Subversion.Build).
Definition ipluginbase.h:203
char8 name[PClassInfo::kNameSize]
class name, visible to the user
Definition ipluginbase.h:192
char8 category[PClassInfo::kCategorySize]
class category, host uses this to categorize interfaces
Definition ipluginbase.h:191
PClassInfo2()
Definition ipluginbase.h:243
TUID cid
Class ID 16 Byte class GUID.
Definition ipluginbase.h:189
uint32 classFlags
flags used for a specific category, must be defined where category is defined
Definition ipluginbase.h:200
int32 cardinality
cardinality of the class, set to kManyInstances (see PClassInfo::ClassCardinality)
Definition ipluginbase.h:190
char8 sdkVersion[kVersionSize]
SDK version used to build this class (e.g. "VST 3.0").
Definition ipluginbase.h:204
@ kVendorSize
Definition ipluginbase.h:195
@ kSubCategoriesSize
Definition ipluginbase.h:197
@ kVersionSize
Definition ipluginbase.h:196
char8 vendor[kVendorSize]
overwrite vendor information from factory info
Definition ipluginbase.h:202
PClassInfo2(const TUID _cid, int32 _cardinality, const char8 *_category, const char8 *_name, int32 _classFlags, const char8 *_subCategories, const char8 *_vendor, const char8 *_version, const char8 *_sdkVersion)
Definition ipluginbase.h:208
char8 subCategories[kSubCategoriesSize]
module specific subcategories, can be more than one, logically added by the OR operator
Definition ipluginbase.h:201
Definition ipluginbase.h:107
int32 cardinality
cardinality of the class, set to kManyInstances (see ClassCardinality)
Definition ipluginbase.h:121
PClassInfo()
Definition ipluginbase.h:139
PClassInfo(const TUID _cid, int32 _cardinality, const char8 *_category, const char8 *_name)
Definition ipluginbase.h:126
TUID cid
Class ID 16 Byte class GUID.
Definition ipluginbase.h:120
@ kNameSize
Definition ipluginbase.h:117
@ kCategorySize
Definition ipluginbase.h:116
char8 category[kCategorySize]
class category, host uses this to categorize interfaces
Definition ipluginbase.h:122
ClassCardinality
Definition ipluginbase.h:110
@ kManyInstances
Definition ipluginbase.h:111
char8 name[kNameSize]
class name, visible to the user
Definition ipluginbase.h:123
Definition ipluginbase.h:271
@ kVendorSize
Definition ipluginbase.h:279
@ kVersionSize
Definition ipluginbase.h:280
@ kSubCategoriesSize
Definition ipluginbase.h:281
void fromAscii(const PClassInfo2 &ci2)
Definition ipluginbase.h:329
char16 name[PClassInfo::kNameSize]
see PClassInfo
Definition ipluginbase.h:276
char16 sdkVersion[kVersionSize]
SDK version used to build this class (e.g. "VST 3.0").
Definition ipluginbase.h:288
uint32 classFlags
flags used for a specific category, must be defined where category is defined
Definition ipluginbase.h:284
char16 version[kVersionSize]
Version string (e.g. "1.0.0.512" with Major.Minor.Subversion.Build).
Definition ipluginbase.h:287
PClassInfoW()
Definition ipluginbase.h:326
char8 subCategories[kSubCategoriesSize]
module specific subcategories, can be more than one, logically added by the OR operator
Definition ipluginbase.h:285
char8 category[PClassInfo::kCategorySize]
see PClassInfo
Definition ipluginbase.h:275
char16 vendor[kVendorSize]
overwrite vendor information from factory info
Definition ipluginbase.h:286
PClassInfoW(const TUID _cid, int32 _cardinality, const char8 *_category, const char16 *_name, int32 _classFlags, const char8 *_subCategories, const char16 *_vendor, const char16 *_version, const char16 *_sdkVersion)
Definition ipluginbase.h:291
TUID cid
see PClassInfo
Definition ipluginbase.h:273
int32 cardinality
see PClassInfo
Definition ipluginbase.h:274
Definition ipluginbase.h:61
int32 flags
(see above)
Definition ipluginbase.h:83
PFactoryInfo()
Definition ipluginbase.h:98
FactoryFlags
Definition ipluginbase.h:64
@ kNoFlags
Nothing.
Definition ipluginbase.h:65
@ kLicenseCheck
Class IDs of components are interpreted as Syncrosoft-License (LICENCE_UID). Loaded in a Steinberg ho...
Definition ipluginbase.h:67
@ kUnicode
Components have entirely unicode encoded strings. (True for VST 3 plug-ins so far).
Definition ipluginbase.h:69
@ kComponentNonDiscardable
Component will not be unloaded until process exit.
Definition ipluginbase.h:68
@ kClassesDiscardable
The number of exported classes can change each time the Module is loaded. If this flag is set,...
Definition ipluginbase.h:66
PFactoryInfo(const char8 *_vendor, const char8 *_url, const char8 *_email, int32 _flags)
Definition ipluginbase.h:85
char8 email[kEmailSize]
e.g. "info@steinberg.de"
Definition ipluginbase.h:82
char8 url[kURLSize]
e.g. "http://www.steinberg.de"
Definition ipluginbase.h:81
char8 vendor[kNameSize]
e.g. "Steinberg Media Technologies"
Definition ipluginbase.h:80
@ kURLSize
Definition ipluginbase.h:74
@ kNameSize
Definition ipluginbase.h:76
@ kEmailSize
Definition ipluginbase.h:75
memcpy(hh, h, RAND_HEAD_LEN)