从VBA调用C ++ DLL

时间:2018-11-15 09:48:28

标签: c++ excel vba visual-studio dll

我尝试在Visual Studio上创建一个C ++ DLL。我想从VBA(Excel)调用此DLL。我创建了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 :(得分:-2)

您不能从VBA调用每个DLL,只能调用ActiveX DLL。