Я пытаюсь создать C ++ DLL на Visual Studio. Я хочу вызвать эту DLL из VBA (Excel). Я создал 3 функции DllRegisterServer()
, DllUnregisterServer()
, runApp()
.
Когда я запускаю regsvr32 DLL1.dll
(имя моей DLL), функция DLLRegisterServer()
работала нормально. Функция runApp()
- это моя тестовая функция.
Но из VBA у меня возникает ошибка при вызове моей DLL:
В 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
Как это сделать?