1

我一直在将嵌入式 C++ 应用程序开发为在 Linux(Ubuntu 11.04)和 Windows(XP)上运行的 DLL/SO(“C”外部)。因此,我不知道我的调用者应用程序是否正在运行 GUI、控制台或两者都不运行。我相信 stdout 和 stderr 在没有连接到它们的控制台时指向位桶,因此仅写入 cout 或 cerr 是无害的,尽管我想知道输出是否真的位于页面文件/交换文件浪费空间的某个位置。

所以我目前的想法是让调用者程序给我一个回调函数(地址)并让该函数看起来像 (void)(*)(void *) 其中 (void *) 指向调用者程序中定义明确的结构我可以在哪里写错误/状态/任何信息。我以前在 C 和 C++ 中做过类似的事情,但我知道我至少会有一个 C# 调用者。C# 可以给我这样的回调吗?它/我读取对方可能写入的数据会有什么困难吗?

或者,我可以弹出一个控制台并向其写入消息。有人可以告诉我该怎么做吗?

我看着在 Windows 中弹出一个消息框,这是一件很痛苦的事情。没看linux。有人有使用 char* 或 std::strings 的示例,而不是 windows 所需的任何数据类型?

FWIW,我们的架构说没有文件,没有共享内存,没有命名管道,也没有用于消息传递的套接字。请记住,作为一个程序,我不知道可写文件的位置,无论如何我都无法可靠地写入文件。正如我所做的那样,某些系统操作肯定会禁用用户对我选择的任何地方的写入。我必须依赖用户将可访问的文件路径和文件名传递给我。

有人可以评论我的情况和想法吗?

非常感谢,

韦斯

评论:如果我理解正确,您是否找到了一种从 C++ DLL 库中记录错误/状态/调试消息的合适方法?而且由于您不了解 DLL 使用者的类型(C/C++ 控制台、C# GUI、..),您不确定是否可以写入标准输出?– m3rLinEz 1 小时前

嗯,不完全是。我想确认在没有控制台时写入 sdtout/stderr 会将输出发送到任何地方并且它不会使交换文件膨胀。我想这意味着无论我的消费者如何都可以写入标准输出。

它的真正含义是,您能否指出我可以用来演示将外部“C”DLL 附加到 C# 程序并让程序设置回调和变量/结构/等的示例代码。并将其地址传递给DLL,然后DLL可以将数据写入var/struct/etc。并调用回调。W。

4

0 回答 0