2009-05-06 100 views
0

我有以下方法,揭露的Borland C++中我用Borland C++代碼的方法C#

static bool UploadBitstream(void) 
{ 
    //Some code Implementation 
} 

和我想要將其轉換爲DLL和訪問在C#。

我需要遵循什麼步驟轉換代碼DLL ,然後在C#中使用它?

+0

我在答覆中錯過了一步嗎?你還沒有在borland dll裏面的代碼嗎?我相信borland有一個DLL項目類型,應該可以構建你正在尋找的東西。 – Mykroft 2009-05-06 14:25:15

回答

1

首先,您必須確保方法是extern定義的。然後,您需要聲明stdcall或pascal調用約定,並將它們標記爲dllexport。查看下面的代碼清單(這對我來說是古老的記憶,所以如果我對現代Borland C++編譯器有點不瞭解)。

// code.h 
extern "C" { 

#define FUNCTION __declspec(dllexport) 

FUNCTION int __stdcall SomeFunction(int Value);  

在主

#include "code.h" 

FUNCTION int __stdcall SomeFunction(int timesThree) 
{ 
    return timesThree * 3; 
} 
+0

感謝Kris,它工作得很好,但我還有一件事要問...我的個人電腦上安裝了borland。但如果我在另一臺PC上測試它,我總是會得到「無法加載DLL」的異常......任何建議? – 2009-05-07 12:32:23

0

一旦你編譯了你的DLL,你需要在.NET中進行訪問才能使用它,這是使用DLLImport屬性。

public class stuff 
{ 
    [DLLImport("somedll.dll")] 
    public static extern void UploadBitstream(); 
} 

如果需要指針或類似的問題就變得更復雜的東西,但對於無效的功能就這麼簡單。

需要注意的是,一旦你調用該函數,DLL將被你的程序加載,直到程序關閉纔會被釋放。你可以動態加載dll,但這要複雜得多。如果你有需要,我可以在這裏解釋一下。

0

注意你的用語。
在你的例子中,UploadBitstream函數不是一個方法。
如果它確實是一個類中的方法,那麼使用Borland編譯的DLL中的類是非常困難的。

如果您的代碼實際上是C而不是C++,那麼您應該可以使用C++ Builder爲您的簡單C風格函數創建兼容的DLL 。

請參閱以下SO問題: Use a dll from a c++ program. (borland c++ builder and in general) 其中我列出了各種編譯器設置,這些設置也適用於創建兼容的DLL。