我有以下方法,揭露的Borland C++中我用Borland C++代碼的方法C#
static bool UploadBitstream(void)
{
//Some code Implementation
}
和我想要將其轉換爲DLL和訪問在C#。
我需要遵循什麼步驟轉換代碼DLL ,然後在C#中使用它?
我有以下方法,揭露的Borland C++中我用Borland C++代碼的方法C#
static bool UploadBitstream(void)
{
//Some code Implementation
}
和我想要將其轉換爲DLL和訪問在C#。
我需要遵循什麼步驟轉換代碼DLL ,然後在C#中使用它?
首先,您必須確保方法是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;
}
感謝Kris,它工作得很好,但我還有一件事要問...我的個人電腦上安裝了borland。但如果我在另一臺PC上測試它,我總是會得到「無法加載DLL」的異常......任何建議? – 2009-05-07 12:32:23
一旦你編譯了你的DLL,你需要在.NET中進行訪問才能使用它,這是使用DLLImport屬性。
public class stuff
{
[DLLImport("somedll.dll")]
public static extern void UploadBitstream();
}
如果需要指針或類似的問題就變得更復雜的東西,但對於無效的功能就這麼簡單。
需要注意的是,一旦你調用該函數,DLL將被你的程序加載,直到程序關閉纔會被釋放。你可以動態加載dll,但這要複雜得多。如果你有需要,我可以在這裏解釋一下。
注意你的用語。
在你的例子中,UploadBitstream函數不是一個方法。
如果它確實是一個類中的方法,那麼使用Borland編譯的DLL中的類是非常困難的。
如果您的代碼實際上是C而不是C++,那麼您應該可以使用C++ Builder爲您的簡單C風格函數創建兼容的DLL 。
請參閱以下SO問題: Use a dll from a c++ program. (borland c++ builder and in general) 其中我列出了各種編譯器設置,這些設置也適用於創建兼容的DLL。
我在答覆中錯過了一步嗎?你還沒有在borland dll裏面的代碼嗎?我相信borland有一個DLL項目類型,應該可以構建你正在尋找的東西。 – Mykroft 2009-05-06 14:25:15