gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:06:13 46 4
gpt4 key购买 nike

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

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

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

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 "Path\To\MyLibrary.dll"
Dim result As Long: result = Test()
End Sub

这很好用。但我似乎无法调试它的 C++ 部分。

我试过启动 Excel,并在执行任何代码之前(即在 DLL 加载到 Excel 之前),将 Visual Studio 附加到正在运行的 Excel 进程。当我设置一个断点时,它是“白色的”——也就是“当前不会命中断点。没有为该文档加载任何符号”。这是有道理的,因为我的 DLL 还没有加载到 Excel 中。

然后,我执行 VBA 代码,这将加载 DLL 并调用测试函数。但是调试器的状态没有改变,断点保持在这个状态;它似乎从来没有意识到库已经加载/能够调试它。

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

谢谢!

最佳答案

您可以尝试添加 __debugbreak 指令。如果 dll 是在调试中构建的,它应该打开 Windows 即时调试器。

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

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

关于c++ - 调试通过 LoadLibrary() 加载到 Excel 中的 C++ DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49902164/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com