C运行时对象,dll边界

Dav*_*eau 6 unix windows dll abi

为dll设计C API的最佳方法是什么,它处理传递依赖于C运行时的"对象"的问题(FILE*,malloc返回的指针等).例如,如果两个dll与运行时的不同版本链接,我的理解是您无法安全地将FILE*从一个dll传递到另一个dll.

唯一的解决方案是使用依赖于Windows的API(保证在dll中工作)?C API已经存在并且已经成熟,但是主要是使用unix POV设计的(当然还是必须使用unix).

Tot*_*nga 0

不同运行时的问题是无法解决的,因为 FILE* 结构属于 Windows 系统上的一个运行时。

但如果你编写一个小的包装接口,你就完成了,这并没有什么坏处。

stdcall IFile* IFileFactory(const char* filename, const char* mode);

class IFile {

  virtual fwrite(...) = 0;
  virtual fread(...) = 0;

  virtual delete() = 0; 
}
Run Code Online (Sandbox Code Playgroud)

这可以保存在各处的 dll 边界上传递,并且不会造成真正的伤害。

PS:如果您开始跨 dll 边界抛出异常,请务必小心。如果您在 Windows 操作系统上满足某些设计要求,那么这将很好地工作,但在其他一些操作系统上会失败。