调试通过 LoadLibrary() 加载到 Excel 中的C++ DLL

Debugging a C++ DLL loaded into Excel via LoadLibrary()

本文关键字:Excel 中的 C++ DLL 加载 LoadLibrary 调试      更新时间:2023-10-16

我正在编写一个基于C++的DLL,它导出了一些函数,假设在一个简单的案例中

__declspec(dllexport) int __stdcall Test()
{
return 123;
}

然后,我通过 VBA 将此 DLL 加载到正在运行的 Excel 进程中,并调用其 Test 函数:

Private Declare PtrSafe Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As LongPtr
Private Declare Function Test Lib "MyLibrary.dll" () As Long
Sub executeTest()
LoadLibrary "PathToMyLibrary.dll"
Dim result As Long: result = Test()
End Sub

这工作正常。但我似乎无法调试其中的C++部分。

我尝试启动Excel,并在执行任何代码之前(即在DLL加载到Excel之前),将Visual Studio附加到正在运行的Excel进程中。 当我设置断点时,它是"白色"——又名"当前不会命中此断点。本文件未加载任何文号"。这是有道理的,因为我的 DLL 尚未加载到 Excel 中。

然后,我执行 VBA 代码,该代码将加载 DLL 并调用 Test 函数。但调试器的状态不会更改,断点仍处于此状态;在任何时候似乎都没有意识到库已被加载/能够调试它。

我在那里做错了什么吗?在这种情况下,有没有办法调试对我的 DLL 的调用?

谢谢!

您可以尝试添加 __debugbreak 指令。如果 dll 是内置调试,它应该打开 Windows 实时调试器。

__declspec(dllexport) int __stdcall Test()
{
__debugbreak(); 
return 123;
}

见 https://msdn.microsoft.com/en-us//library/f408b4et.aspx