Предоставить методы Borland C ++ для C #
-
06-07-2019 - |
Вопрос
У меня есть следующий метод в моем коде Borland 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;
}
Другие советы
После того как вы скомпилировали свою DLL, все, что вам нужно сделать в .NET, чтобы получить к ней доступ, - это использовать свойство DLLImport.
public class stuff
{
[DLLImport("somedll.dll")]
public static extern void UploadBitstream();
}
Если вам нужны указатели или что-то в этом роде, это усложняется, но для пустых функций это так просто. Р>
Следует отметить, что как только вы вызовете эту функцию, dll будет загружена вашей программой и не будет освобождена, пока ваша программа не будет закрыта. Вы можете динамически загружать dll, но это намного сложнее. Я могу объяснить это здесь, если у вас есть необходимость.
Следите за своей терминологией.
В вашем примере UploadBitstream - это функция, а не метод.
Если это действительно метод в классе, то очень трудно использовать классы из скомпилированных библиотек Borland.
Если ваш код на самом деле C, а не C ++, вы сможете создать совместимую DLL для ваших простых функций в стиле C с помощью C ++ Builder.
Смотрите следующий вопрос: Использовать dll из программа на С ++. (Borland C ++ Builder и вообще) где я перечислю различные настройки компилятора, которые также будут применяться для создания совместимых DLL.