Xplatcppwindowsdll Updated 🌟 💯
Set CMAKE_MSVC_RUNTIME_LIBRARY consistently across all projects. 🔴 Pitfall 2: C++ Exceptions Crossing DLL Boundaries Throwing an exception from a DLL and catching it in the main executable is unsafe if they aren’t compiled with the same compiler and EH flags. The updated toolchain optionally wraps all public functions with a std::error_code facade.
XPLATCPP_NO_EXCEPTIONS_OVER_BOUNDARY=ON 🔴 Pitfall 3: Global Objects The new load-time profiler will flag any non-trivial static objects. The recommended pattern is now:
#include <xplatcpp/api.h> class XPLATCPP_PUBLIC MyClass ... ; xplatcppwindowsdll updated
Introduction The software development landscape has long been defined by a central tension: the desire for native performance and the need for cross-platform compatibility. For C++ developers, this often translates into building shared libraries (DLLs on Windows, SOs on Linux, DYLIBS on macOS) that can be called from higher-level applications written in Python, C#, or even JavaScript.
For functions that must have C linkage (to be callable from other languages like C# via P/Invoke), you can still use extern "C" alongside the macro: For C++ developers, this often translates into building
The updated module automatically generates a .def file for MSVC, ensuring that even C++ mangled names are correctly exported without needing extern "C" wrappers. The update adds native integration with Windows side-by-side (SxS) assemblies . You can now annotate your cross-platform CMakeLists.txt with version ranges:
// vcpkg.json "dependencies": [ "xplatcppwindowsdll", // version >=3.0.0 ] The function signature for add_xplatcpp_dll has changed to xplatcpp_windows_dll . Here’s a migration diff: // version >
find_package(xplatcpp 3.0 REQUIRED) xplatcpp_windows_dll( TARGET MyEngine SOURCES engine.cpp PRIVATE_DEFINES _CRT_SECURE_NO_WARNINGS PUBLIC_DEFINES MYENGINE_EXPORTS WINDOWS_VERSIONINFO on LOAD_TIME_PROFILING off # optional, enable for debugging ) The new explicit TARGET and WINDOWS_VERSIONINFO parameters prevent ambiguous parsing. Replace your own export macros with #include <xplatcpp/api.h> and tag public classes/functions with XPLATCPP_PUBLIC .