【问题标题】:Call C++ DLL from VBA从 VBA 调用 C++ DLL
【发布时间】:2019-04-18 09:17:02
【问题描述】:

我尝试在 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

怎么办?

【问题讨论】:

  • 如果您不使用完整路径 (c:\foo\bar\baz\dll1.dll),那么您必须将 DLL 放在 Excel 可以找到的位置。没有多少吸引人的位置,c:\windows 和 PATH 都很丑。考虑将其放在 Office 安装文件夹中,即存储 Excel.exe 的相同位置。
  • 您的 dll 似乎没有导出 COM 对象,因此您不需要注册它(这样做对您毫无用处)。 runApp 应该在 VBA 端声明为 As Long,因为这就是 DWORD。否则,除非您提供到Dll1.dll 的完整路径,否则您需要将其放在searched directories 之一中,或者在第一次调用runApp 之前调用SetDllDirectory

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    相关资源
    最近更新 更多