2009-05-06 101 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。