잘 모르겠어요,하지만 당신은 C# 응용 프로그램에서 C 프로그램에서 함수를 호출 할 수 있는지 묻는 경우 : 이것은 당신의 C# 트레이 응용 프로그램 제어하지 않고 다른 프로세스를 시작할 것이다 , 그럴 수 있습니다. C 프로그램의 소스 코드를 가지고있는 한. C에서 함수를 C# 프로그램에서 사용할 수 있으려면 해당 함수를 내 보내야합니다.
#include <iostream>
extern "C"
{
__declspec(dllexport) int Add(int a, int b);
}
가 뭐죠 중요한 여기 함수는 extern "C"
블록에 싸여 있다는 점이다
MyAddDll.h : 나는 당신에게 예를 보여줍니다. 기본적으로 컴파일러는 함수의 이름을 맹 글링하지 말아야한다. 다른 중요한 부분은 __declspec(dllexport)
입니다. 이것은이 함수를 다른 프로그램 (예 : C# 프로그램)에서 호출 할 수 있도록 함수를 내 보내려한다는 것을 컴파일러에 알립니다.
MyAddDll.
#include <iostream>
#include "MyAddDll.h"
extern "C"
{
__declspec(dllexport) int Add(int a, int b)
{
return (a + b);
}
}
CPP
는 다시 코드는
extern "C"
블록에 싸여 도착하면 함수에
__declspec(dllexport)
를 추가해야합니다. 이제 이것을 DLL 파일이나 EXE 파일로 컴파일 할 수 있습니다. 지금은 꽤 똑바로 앞으로, C 번호에서 호출합니다 :
MyProgram.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 *로 작성된 * 콘솔 응용 프로그램을 의미하는 것으로 추측합니다.이 경우 대답은 * no *이고 콘솔 응용 프로그램은 수정하지 않고 트레이 응용 프로그램으로 실행할 수 없습니다. 콘솔 응용 프로그램에없는 알림을 수신하려면 최소한 윈도우 핸들과 메시지 루프가 있어야합니다. –
대답이 충분하지 않더라도 .... .NET 프로그램이 백그라운드에서 콘솔 응용 프로그램을 시작할 수 있습니다. –
@Keith : 그것은 질문이 묻는 것 인 트레이 응용 프로그램이 아닙니다. –