Visual Studio 2019 C ++ DLL Excel VBA надстройка Проблемы - PullRequest
1 голос
/ 29 февраля 2020

У меня проблемы с работой простого надстройки Excel VBA. Я использую простой пример на https://www.vitoshacademy.com/c-adding-c-function-to-vbaexcel/, чтобы начать, но не могу заставить работать даже этот простой пример. SimpleMath. cpp, defMe.def и код VBA приведены ниже. Я добавил в SimpleMath. cpp свойства: Линкер: Вход: Файл определения модуля: defMe.def. В VS2019 код C ++ успешно компилируется и создает файл SimpleMath.dll, как и ожидалось в папке Debug. Но я пробовал много альтернатив, но не могу заставить работать код VBA в Excel. Поскольку многие веб-варианты этого примера выглядят старыми, мне интересно, требует ли VS2019 / C ++ что-то, что не описано в старых примерах?

В Excel появляется «Ошибка времени выполнения 453»: не удается точная точка входа DLL SimpleMath в c: \ VS19Projects \ CPP \ SimpleMath \ Debug \ SimpleMath.dll ".

Я использовал dumpbin / HEADERS SimpleMath.dll при попытке просмотра точки входа в dll. Точка входа не возвращается. Это может указывать на то, что я использую * .def неправильно.

Руководство и предложения будут оценены.

//SimpleMath.cpp
int __stdcall SimpleMath(int & x)
{
    int result = 0;
    for (int a = 0; a <= x; a++) {
        result += a;
    }
    return result;
}
;defMe.def C++ code
LIBRARY "SimpleMath"
EXPORTS
SimpleMath
// VBA Code in Excel Module
Declare Function SimpleMath Lib "C:\VS2019Projects\SimpleMath\Debug\SimpleMath.dll" (ByRef x As        Long) As Long
Sub TestMe()
    Dim n As Long: n = 5
    dim result as long
    result = SimpleMath(n)
End Sub

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Я наконец получил этот пример Excel VBA доступный MSV C Dll, работающий с кодом ниже. У меня были проблемы с этим в Visual Studio (еще не до изучения MSBuild). Поэтому я сделал это, используя код VS с компиляцией командной строки для smdll. cpp и smapp. cpp согласно комментариям в приведенном ниже коде. Я включил тестовый код C ++ (smapp. cpp) и код VBA ниже. Отладочные ключи компиляции могут быть добавлены [/ LDd (smdll. cpp) & / Zi (smapp. cpp)] для тестового кода C ++. Я использовал VS2019 «Командная строка разработчика» для выполнения: «...> dumpbin / EXPORTS smdll.dll» для определения псевдонима VBA (_SimpleMath@4).

Руководство по «get_up_the_curve» с VS2019 MSBuild для разработки в VS2019 будет оценен? Мне удалось заставить скрипты сборки и отладки работать в VS Code. Мне не удалось заставить метод файла * .def работать. Руководство по этому вопросу также будет оценено.

 //smdll.cpp
 // cl /EHsc /LD smdll.cpp
 #include "smdll.h"
 extern "C" {__declspec(dllexport)  long __stdcall SimpleMath(long  x)
    {   long result = 0;
        for (long a = 0; a <= x; a++) result += a;
        return result;
    }
  }
// smdll.h
extern "C" {__declspec(dllexport)  long __stdcall SimpleMath(long  x);}
// smapp.cpp
// cl /EHsc smapp.cpp smdll.lib
#include <iostream>
#include "smdll.h"
using namespace std;
void main () {
    const long x = 5;
    long result = SimpleMath(x);
    cout << "Ans: " << result << endl;
}
'Excel VBA subroutine
Option Explicit
'used "...>dumpbin /EXPORTS smdll.dll VS 2019 command to get below Alias for smapp
Declare Function smapp Lib "<Path_to>\SimpleMath\smdll.dll" Alias "_SimpleMath@4" (ByVal a As Long) As Long
Sub test()
Dim x, result As Long
x = 5
result = smapp(x)
End Sub
0 голосов
/ 03 марта 2020

У меня все еще нет моей DLL, работающей с Excel. Я провел обдуманное исследование, чтобы изучить и отладить это и работать с Excel.

Я пробовал вариант EXPORTS с использованием C ++ * .def и VBA Declare. Безуспешно.

Затем я обнаружил MSFT Учебник по отладке смешанного режима . Мне удалось заставить это приложение примера C ++ DLL / C# работать очень быстро в VS2019. Я не смог адаптировать это для работы с Excel VBA. Вполне возможно, что мое понимание «собственного и управляемого кода C ++» является недостаточным.

Цель моего проекта - в конечном итоге (и, мы надеемся) успешно создать высокопроизводительную DLL-библиотеку C ++ для ускорения медленных вычислений в двумерном массиве в Excel , У меня более низкая производительность C# COM dll работает, но мне нужна более высокая производительность C ++ DLL. Но я даже не могу заставить работать эту гораздо более простую C ++ DLL.

Рекомендации и предложения по достижению этих целей будут оценены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...