调试通过 LoadLibrary() 加载到 Excel 中的C++ DLL
Debugging a C++ DLL loaded into Excel via LoadLibrary()
我正在编写一个基于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
相关文章:
- 从Excel VBA调用C++DLL只能从Visual Studio中的调试实例工作
- 如何使用 Win32 API 从 Excel VBA 中的非"Single-Threaded Apartment"线程调用 InternetGetProxyInfo
- 调试通过 LoadLibrary() 加载到 Excel 中的C++ DLL
- 我无法将 Excel 中的输入字符串存储为二维字符串
- C 程序要读取包含两个双重值的Excel数据的单列,这些值由逗号分隔并存储在自己的数组中
- Excel 2010与Excel 2003中的整数表示法(C++插件)
- 通过读取excel表为c文件中的变量赋值
- 在Excel中使用DLL 由C++制成的VBA
- 在C C++中比较和匹配单词/excel文件中的数字
- 如何在另一台电脑中使用依赖于Excel中的gsl dll的c++dll
- ATL/COM对象的方法:在VBA for excel中调用它,而不是在c#中调用它
- 比较excel中的列
- 返回Excel XLL中的数组
- 通过OLE Automation从c++应用程序运行存储在Excel工作簿中的指定宏
- 从c++在Excel中写入单元格-没有写入值,单元格是空白的
- 使用excel表格中的数据填充web文本字段,提交页面,重复
- 调用64位Excel中的C DLL用于VBA
- 读取文件夹中的所有文件,然后将每个文件及其匹配项放入新的excel文档中.是否可以用c++
- 类似于MS Excel中的图表功能,给定一组数字,生成数学方程来描述这组数字
- <int> 在不序列化的情况下从内存堆中打开 excel 中的 std::vector?