我的 Borland C++ 代码中有以下方法,
static bool UploadBitstream(void)
{
//Some code Implementation
}
我正在尝试将其转换为 DLL 并在 C# 中访问它。
转换代码 DLL 然后在 C# 中使用它需要遵循哪些步骤?
我的 Borland C++ 代码中有以下方法,
static bool UploadBitstream(void)
{
//Some code Implementation
}
我正在尝试将其转换为 DLL 并在 C# 中访问它。
转换代码 DLL 然后在 C# 中使用它需要遵循哪些步骤?
首先,您必须确保方法是在外部定义的。然后你需要声明方法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;
}
注意你的术语。
在您的示例中 UploadBitstream 是函数而不是方法。
如果它确实是类中的方法,那么很难使用 Borland 编译的 DLL 中的类。
如果您的代码实际上是 C 而不是 C++,您应该能够使用 C++ Builder 为您的简单 C 风格函数创建兼容的 DLL。
请参阅以下 SO 问题: Use a dll from a c++ program。(borland c++ builder 和一般 情况下)我列出了各种编译器设置,这些设置也适用于创建兼容的 DLL。
编译完 DLL 后,在 .NET 中访问它所需要做的就是使用 DLLImport 属性。
public class stuff
{
[DLLImport("somedll.dll")]
public static extern void UploadBitstream();
}
如果您需要指针或类似的东西,它会变得更加复杂,但对于 void 函数,它就是这么简单。
应该注意的是,一旦您调用该函数,该 dll 将由您的程序加载,并且在您的程序关闭之前不会被释放。您可以动态加载 dll,但这要复杂得多。如果您有需要,我可以在这里解释。