我尝试在Visual Studio上创建一个C ++ DLL。我想从VBA(Excel)调用此DLL。我创建了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
怎么办?
答案 0 :(得分:-2)
您不能从VBA调用每个DLL,只能调用ActiveX DLL。