在Pascal中实现的.lib的C ++包装器

时间:2011-10-20 12:25:04

标签: c++ dll

我有一个C ++ Builder项目,它使用这个库http://www.torry.net/authorsmore.php?id=1881(Cipher)。

  • 包含源文件(.hpp / .pas)
  • .lib文件包含在内

似乎它是一个C ++ Builder库,但我想用C ++编写一个包装器,以便在C ++程序和C#程序中使用它(简单地说,制作一个这个库的DLL)。

我的问题是,我是一个完全初学者,不知道该怎么做。

我应该在我的项目中包含lib文件并在extern中声明所有函数以包装它吗?

我需要一些帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

您需要匹配API调用,这会让您感到多余和无聊。但是,在我看来,这项工作是合理的,因为此时你的DLL几乎可以在任何地方使用。目标是包装C ++ Builder项目,因为它正在编译.pas文件,这些文件在C ++ Builder / Delphi世界之外是编译友好的。

根据我的经验,编写接受不透明指针的“C”函数是最灵活的方法:

typedef void * MYHANDLE;

extern "C" MYHANDLE CreateMyObject(void)
{
    MyCppObject * obj = new MyCppObject();
    return static_cast<MYHANDLE>(obj);
}

/* Calls to your other C++ methods as well */

extern "C" void DeleteMyObject(MYHANDLE obj)
{
    MyCppObject * ptr = static_cast<MyCppObject*>(obj);
    delete ptr;
}