gpt4 book ai didi

c# - 如何从 C# 系统托盘应用程序将 C 程序作为线程运行?

转载 作者:可可西里 更新时间:2023-11-01 09:43:10 34 4
gpt4 key购买 nike

我有一个 C 控制台应用程序,它曾经在 WindowsCMD 终端中的前台运行,并接受用户击键输入。但是,现在需要将其移至后台并且不需要用户输入。

我已经创建了一个系统托盘,它是通过右键单击退出和右键单击关于来正确实现的。并有一个执行该功能的终端程序。

我不想再次重写程序,而是希望能够创建一个线程来调用我现有程序中不需要终端的函数。

只是为了强调这一点,控制台交互方面已从代码中删除,应用程序对击键的响应等也已从代码中删除。希望这能稍微澄清一些事情。

问题:这可能吗?我将如何实现?

(我通常不是使用更多嵌入式 C 的 PC 程序员,所以 .NET 对我来说很陌生。非常感谢任何帮助)

最佳答案

我不确定这是否是您要问的,但如果您询问是否可以从 C# 应用程序调用 C 程序中的函数,那么您可以。只要你有你的 C 程序的源代码。为了让 C# 程序可以使用 C 中的函数,必须导出它们。我将向您展示一个示例:

MyAddDll.h

#include <iostream>

extern "C"
{
__declspec(dllexport) int Add(int a, int b);
}

这里重要的是您的函数包装在 extern "C" block 中。基本上,这告诉编译器不要破坏函数的名称。另一个重要的部分是 __declspec(dllexport)。这会告诉编译器您要导出此函数,以便可以从另一个程序(例如您的 C# 程序)调用它。

MyAddDll.cpp

#include <iostream>
#include "MyAddDll.h"

extern "C"
{
__declspec(dllexport) int Add(int a, int b)
{
return (a + b);
}
}

同样,您的代码被包裹在 extern "C" block 中,您需要将 __declspec(dllexport) 添加到函数中。现在您可以将其编译成 DLL 文件或 EXE 文件。现在从 C# 调用它,非常简单:

我的程序.cs

class Program
{
[DllImport("c:\\PathToMyDllOrExeFile\\MyAddDll.dll")]
public static extern int Add(int val1, int val2);

static void Main(string[] args)
{
int val1 = 12;
int val2 = 4;
Console.WriteLine("{0} + {1} = {2}", val1, val2, Add(val1, val2));
}
}

就这些了!

但有一个“陷阱”是确保您的 C 程序和 C# 程序都编译为 32 位或 64 位。您不能将 C 程序编译为 64 位,将 C# 程序编译为 32 位。它们必须使用相同的位长。

关于c# - 如何从 C# 系统托盘应用程序将 C 程序作为线程运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27558702/

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