2011-10-20 67 views
1

我有一個使用此庫的C++ Builder項目http://www.torry.net/authorsmore.php?id=1881(Cipher)。C++在Pascal中實現的.lib包裝

  • 源文件包含(.HPP/.PAS)
  • 的.lib文件包含

似乎是,它是一個C++ Builder庫,但我想要寫在C++包裝爲了在C++程序和C#程序中使用它(簡單地說,製作這個lib的DLL)。

我的問題是,我是一個完全初學者,不知道如何做這樣的事情。

我應該在我的項目中包含lib文件並聲明extern中的所有函數以包裝它嗎?

我需要一些幫助,謝謝。

+0

參閱創建DLL的C++ Builder幫助主題。 –

回答

2

您將需要匹配API調用,並且會變得冗餘和無聊。然而,在我看來,這項工作是合理的,因爲你的DLL可以在任何地方使用。目標是包裝C++ Builder項目,因爲它正在編譯在C++ Builder/Delphi世界以外的編譯器友好的.pas文件。

這一直是我的經驗,編寫「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; 
}