我有以下方法,揭露的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