【问题标题】:How can I see the output from printf's that are called from a DLL used by a Mex function in Matlab?如何查看从 Matlab 中 Mex 函数使用的 DLL 调用的 printf 的输出?
【发布时间】:2015-07-14 14:34:25
【问题描述】:

我有一些从 DLL 调用函数的 MEX 代码。 DLL 有一堆散落在各处的 printf 语句,它们对调试很有用。但是,我在 MATLAB 命令窗口中看不到它们的输出。我做了一些阅读,显然这是因为命令窗口不被视为可以发送 printf 输出的控制台应用程序。我试过使用这个link's 解决方案无济于事。我可以访问 DLL 的源代码。我正在为 Visual Studio 2010 中的 Windows 7 进行编译。我尝试使用 cout 并且有效;但是,我不想重写所有函数来使用 cout。有什么办法可以将 printf 的输出重定向到 MATLAB 的命令窗口?

【问题讨论】:

    标签: c++ matlab dll mex


    【解决方案1】:

    您需要在 DLL 加载和初始化其运行时库之前调用SetStdHandle。您可以连接管道的写入端,并从另一端读取。

    一旦运行时库初始化,它将拥有与原始标准输出句柄相关联的全局数据,并且可能不会受到未来对 SetStdHandle 的调用的影响。

    【讨论】:

    • 谢谢。我假设 DLL 在使用它的 mex 文件第一次运行时加载并初始化其运行时库,对吗?如果是这样,我会在哪里打电话给SetStdHandle
    • @Damian:在调用 mex 函数之前?
    • here 所示,在DLLMain 中执行此操作是否为时已晚?否则,如果没有使用实际 mec 文件的包装 mex 文件,我不明白如何做到这一点。
    • @Ben:mex 函数与我提到的库相关联。因此,每当我运行 mex 函数时,我假设它会加载 DLL。那么我应该在哪里运行 SetStdHandle?
    • @chappjc:我明白你在说什么:将SetStdHandle 放入DLLMain,对吗?或者,我可以创建一个执行此操作的 Mex 文件并在开始时运行它。 SetStdHandle 是永久的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    相关资源
    最近更新 更多