相关疑难解决方法(0)

GCC与MS C++编译器,用于维护API向后二进制兼容性

我来自Linux世界,并且知道很多关于维护用C++语言编写的动态库API的向后二进制兼容性(BC)的文章.其中之一是基于Itanium C++ ABI的"使用C++的策略/二进制兼容性问题",它由GCC编译器使用.但我找不到类似的Microsoft C++编译器(来自MSVC).

我知道大多数技术都适用于MS C++编译器,我想发现与ABI差异相关的编译器特定问题(v表格布局,修改等)

所以,我的问题如下:

  • 你知道维护BC时MS C++和GCC编译器之间有什么区别吗?
  • 在哪里可以找到有关MS C++ ABI的信息或在Windows中维护API的BC?

任何相关信息将受到高度赞赏.
非常感谢你的帮助!

c++ gcc backwards-compatibility visual-c++ itanium-abi

19
推荐指数
3
解决办法
4845
查看次数

如何在C++中用dll(dll中的构造函数)创建一些类?

如何从dll(dll中的构造函数)创建一些类?(C++)或如何从dll动态加载类?

c++ winapi constructor

8
推荐指数
2
解决办法
6912
查看次数

为什么COM(组件对象模型)与语言无关?

我知道COM在语言和应用程序的二进制级别上提供了可重用性.我读到为COM构建的所有组件必须遵循标准内存布局才能与语言无关.

我不明白"标准内存布局"是什么意思.

是什么让COM语言独立?

c++ com

7
推荐指数
1
解决办法
2701
查看次数

创建插件界面

我正在开发一个需要支持插件架构的应用程序.这是我第一次这样做,所以我不完全确定我需要怎么做.

如何从dll(dll中的构造函数)创建一些类?(с++)建议我只需要创建一个由完全虚函数组成的类,让DLL在自定义类中实现它并通过GetPluginObject()方法返回该自定义对象或类似.但是,C++ DLL插件接口表示这还不够,并且正确(跨多个编译器兼容)方法将需要以下内容:

  • 只有基本数据类型可用
  • 必须公开COM的QueryInterface之类的东西,以便插件DLL可以正确识别它实现的接口
  • 需要某种形式的引用计数
  • 所有方法优选标记为stdcall
  • 任何结构必须固定对齐

我需要一个插件做的很简单:我只需要从一个函数返回一个结构数组.

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++ dll plugins interface

6
推荐指数
1
解决办法
6642
查看次数