我来自Linux世界,并且知道很多关于维护用C++语言编写的动态库API的向后二进制兼容性(BC)的文章.其中之一是基于Itanium C++ ABI的"使用C++的策略/二进制兼容性问题",它由GCC编译器使用.但我找不到类似的Microsoft C++编译器(来自MSVC).
我知道大多数技术都适用于MS C++编译器,我想发现与ABI差异相关的编译器特定问题(v表格布局,修改等)
所以,我的问题如下:
任何相关信息将受到高度赞赏.
非常感谢你的帮助!
如何从dll(dll中的构造函数)创建一些类?(C++)或如何从dll动态加载类?
我知道COM在语言和应用程序的二进制级别上提供了可重用性.我读到为COM构建的所有组件必须遵循标准内存布局才能与语言无关.
我不明白"标准内存布局"是什么意思.
是什么让COM语言独立?
我正在开发一个需要支持插件架构的应用程序.这是我第一次这样做,所以我不完全确定我需要怎么做.
如何从dll(dll中的构造函数)创建一些类?(с++)建议我只需要创建一个由完全虚函数组成的类,让DLL在自定义类中实现它并通过GetPluginObject()方法返回该自定义对象或类似.但是,C++ DLL插件接口表示这还不够,并且正确(跨多个编译器兼容)方法将需要以下内容:
我需要一个插件做的很简单:我只需要从一个函数返回一个结构数组.
struct InternalCommand
{
int commandValue;
std::wstring commandName;
std::wstring commandHandlerFunctionName; //I'm planning on using GetProcAddress with the provided function name to get the individual command handler
}
std::vector<InternalCommand> GetEmergeInternalCommands();
Run Code Online (Sandbox Code Playgroud)
鉴于上面列表中的限制和要求,并使用此项目中的另一个接口作为模板,我似乎需要通过以下方式定义它:
#define MAX_LINE_LENGTH 4096
#ifdef __GNUC__
#define ALIGNOF(type) __alignof__(type)
#else
#define ALIGNOF(type) __alignof(type)
#endif
#ifdef __GNUC__
#define ALIGNED(size) __attribute__((aligned (size)))
#else
#define ALIGNED(size) __declspec(align(size))
#endif
#include <windows.h>
// {b78285af-c62f-4cff-9e15-f790a4a219ee}
const IID IID_IEmergeInternalCommand = {0xB78285AF, 0xC62F, 0x4CFF, {0x9E, 0x15, …Run Code Online (Sandbox Code Playgroud) c++ ×4
com ×1
constructor ×1
dll ×1
gcc ×1
interface ×1
itanium-abi ×1
plugins ×1
visual-c++ ×1
winapi ×1