/// @file platform/platform.h
// ...
// lookup include directories.
#if( BUILD_PLATFORM_WINDOWS_DESKTOP )
#include <platform.windows/platform.windows.h>
#elif( BUILD_PLATFORM_ANDROID )
#include <platform.windows/platform.android.h>
#else
#error Unknown platform.
#endif
// lookup local 'platform' directory.
#include "File.h"
// ...
/// @file platform.windows/platform.windows.h
// ...
// lookup local 'platform.windows' directory.
#include "PlatformSpecificFile.h"
// ...
/// @file somewhere/in/your/api/file.h
// ...
#include <platform/platform/h>
// ...
File my_file{ file_name, OpeningMode::CreateAlways, AccessOptions::Read, SharingOptions::Read };
// ...
https://msdn.microsoft.com/en-us/library/k2b2ssfy.aspx
Важнее всего - выработать соглашение о передаче параметров.
https://msdn.microsoft.com/en-us/library/984x0h58.aspx
Для все той же программы я принял что весь низкоуровневый код будет работать по схеме "cdecl" - стандартной для c++.
Еще важно знать что между функциями из разных модулей обмениваться желательно только POD типами:
en.cppreference.com/w/cpp/concept/PODType
Если надо прокинуть объект, то делать это надо через указатель на интерфейс. И указатель должен быть голым (Raw Pointer). При этом, с другой стороны вызова функции пользоваться желательно только функциями этого интерфейса. И еще с этим интерфейсом желательно не делать никаких преобразований к другим типам.
Всегда следует помнить что внутри плагина среда исполнения может оказаться другой по сравнению с основным приложением.
Может быть ты это все и так знаешь... А может быть и нет. Я просто делюсь информацией.