Вызов C ++ DLL из VBA - PullRequest
       7

Вызов C ++ DLL из VBA

0 голосов
/ 15 ноября 2018

Я пытаюсь создать C ++ DLL на Visual Studio. Я хочу вызвать эту DLL из VBA (Excel). Я создал 3 функции DllRegisterServer(), DllUnregisterServer(), runApp().

Когда я запускаю regsvr32 DLL1.dll (имя моей DLL), функция DLLRegisterServer() работала нормально. Функция runApp() - это моя тестовая функция. Но из VBA у меня возникает ошибка при вызове моей DLL:

enter image description here

В Visual Studio я создал проект библиотеки динамических ссылок (DLL).

Вот мой DLL1.cpp:

#include "stdafx.h"
#include "Dll1.h"

DWORD __stdcall DllRegisterServer() {
    int msgboxID = MessageBox(
    NULL, (LPCWSTR)L"Dans DLLRegisterServer", (LPCWSTR)L"Test",MB_OK |  
    MB_ICONWARNING);

return 0;
}

DWORD __stdcall DllUnregisterServer() {
    return 0;
}

DWORD __stdcall runApp() {
    int msgboxID = MessageBox(
        NULL,
        (LPCWSTR)L"Fonction runApp", (LPCWSTR)L"Test_App",
        MB_OK | MB_ICONWARNING
   );
   return 0;
}

Вот мой DLL1.h:

#pragma once

#include <windows.h>

extern "C" DWORD __stdcall DllRegisterServer();
extern "C" DWORD __stdcall DllUnregisterServer();
extern "C" DWORD __stdcall runApp();

Вот мой Source.def:

LIBRARY

EXPORTS
  DllRegisterServer PRIVATE
  DllUnregisterServer PRIVATE
  runApp

Моя DLL работает нормально, без ошибок и предупреждений.
Я поместил свой проект VBA в ту же папку, что и файл DLL1.dll.
Вот мой сценарий VBA:

Option Explicit

Public Declare PtrSafe Function runApp Lib "Dll1.dll" () As LongPtr

Public Sub testRunApp()
    Dim lRetCode As LongPtr
    lRetCode = runApp
    MsgBox "runApp a retourné le code " & lRetCode, vbOKOnly Or vbSystemModal Or vbInformation, "test de DLL"
End Sub

Как это сделать?

1 Ответ

0 голосов
/ 15 ноября 2018

Вы не можете вызывать каждую DLL из VBA, можно вызывать только ActiveX DLL.

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