我有一个C ++ Builder项目,它使用这个库http://www.torry.net/authorsmore.php?id=1881(Cipher)。
似乎它是一个C ++ Builder库,但我想用C ++编写一个包装器,以便在C ++程序和C#程序中使用它(简单地说,制作一个这个库的DLL)。
我的问题是,我是一个完全初学者,不知道该怎么做。
我应该在我的项目中包含lib文件并在extern
中声明所有函数以包装它吗?
我需要一些帮助,谢谢。
答案 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;
}