Вызов функции DLL с псевдонимом "MAX" в Excel - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть функция в моей DLL с псевдонимом "MAX".

Затем я пытаюсь использовать ее через VBA в моем документе Excel:

  • часть VBA-файла:
Declare PtrSafe Function MAX_impl Lib "model_64.dll" Alias "MAX" (x As Variant, ByVal idx_f As Integer, out As Variant) As Integer
  • значение ячейки в Excel-файле:

=MAX(B2:B3, 1)

Но вместо вызова моей DLL-функции я получил вызов функции MAX из Excel. Есть ли способ указать, что вызов должен быть выполнен в DLL? Может быть, какой-то префикс возможен?

Как:

=<prefix>.MAX(B2:B3, 1) # call to DLL function

Решение, которое сработало для меня : я закончил с этим префиксом - Module1

Так в Excel-файле я пишу:

=Module1.MAX(B2:B3, 1)  # this actually calls my DLL function

1 Ответ

1 голос
/ 16 апреля 2020

От всей души я бы предложил вам создать функцию publi c в VBA-модуле, а затем вызвать ее из Excel-ячейки.

Скажем, вы хотите вызвать =MyMax(...), чтобы использовать функцию из вашей DLL. Затем вам нужно будет выполнить эти два простых шага:


  1. Добавить модуль (если он еще не существует), используя Вставить ➡️ Модуль
  2. В этом модуле , пожалуйста, создайте функцию publi c следующим образом:
    Public Function MyMax(x As Variant, ByVal idx_f As Integer, out As Variant) As Integer
      MyMax = Max(x, idx_f)
    End Function
    

Это позволяет вам создать функцию MyMax, которую вы сможете вызывать из вашей электронной таблицы. Это, в свою очередь, просто действует как прокси для вызова фактической функции из DLL и возвращает ее значение в ячейку.

Примечание: Я не проверял это, но я полагаю, вы лучше использовать псевдонимы для вашей функции с именем i), отличным от «Max», чтобы избежать путаницы со встроенными функциями, и ii) кроме вашей прокси-функции, чтобы избежать путаницы с этой.

Подробнее подробные инструкции о том, как создать такую ​​пользовательскую функцию, можно найти здесь .

...