Как мне вызвать метод C # Dll метод, используя RegAsm? - PullRequest
0 голосов
/ 25 февраля 2019

Я создал C # Dll, который использует "Register for com interop", и мне удалось зарегистрировать его с помощью RegAsm:

RegAsm.exe -tlb -codebase MathLib.dll

После этого я получил сообщение:

"Экспортированная сборкав C: \ Test \ MathLib.tlb, и библиотека типов была успешно зарегистрирована "

Как мне теперь вызывать методы внутри Dll?Например, он имеет публичную функцию:

int Add(int a, int b) { return a + b; }

, которая добавляет 2 числа и возвращает результат.Как мне вызвать его из командной строки и увидеть результат операции?

Большое спасибо.

1 Ответ

0 голосов
/ 25 февраля 2019

Как это работает?

Создать новую библиотеку классов или продолжить работу с существующей.Затем добавьте пакет UnmanagedExports Nuget.

Это практически все необходимые настройки.

Теперь вы можете написать любой статический метод, украсить его с помощью [DllExport] и использовать его из nativeкод.Он работает так же, как DllImport, поэтому вы можете настроить маршаллинг параметров / результата с помощью MarshalAsAttribute.

Во время компиляции моя задача изменит IL для добавления необходимых экспортов.

Aхорошим примером были бы следующие строки:

class Test
{
  [DllExport("Add", CallingConvention = CallingConvention.Cdecl)]
  public static int Add(int a, int b)
  {
     return a + b;
  } 
}

Как вы знаете, продолжайте регистрировать свою библиотеку в RegAsm.Чтобы импортировать вашу COM-функцию обратно в другой проект, вы должны выполнить Marshall, как собственный метод, объявив его в своем коде с атрибутом [DLLImport].

Ссылки:

Неуправляемые экспорты

Пакет UnmanagedExports Nuget

Надеюсь, это каким-то образом помогло.

...