나는 많이 봤지만 내 매우 구체적인 문제에 대한 해결책을 찾지 못했습니다. 적어도 매우 구체적인 것으로 보입니다. 다음과 같은 상황이 있습니다 :Mono/C# 프로그램으로 linux/C++ 함수를 호출하는 방법은 무엇입니까?
ARM- 보드에 임베디드 리눅스 (데비안). CAN 버스 및 SocketCAN API를 통해 데이터를 보내고받는 "오래된"C++ 응용 프로그램이 있습니다.
하지만 최근에 저는 C#으로 몇 가지 프로젝트를 진행했으며 .NET Framework가 정말 마음에 들었습니다. 이것이 내가 임베디드 시스템에 Mono를 설치 한 이유입니다. 순수 C# 응용 프로그램을 실행해도 아무런 문제가 없습니다.
하지만 이제 mono/C# 응용 프로그램을 통해 CAN 버스에 액세스하려고합니다. 소켓 API로 API가 없으므로 문제가되는 것 같습니다. 그래서 C# 프로그램이 데이터를 처리하는 동안 기본 소켓 작업을 생성하고 처리하는 C++ 함수를 호출하는 아이디어가 있습니다.
C++ 함수를 호출하거나 C++ 함수/클래스를 DLL로 컴파일하고 C#에서 호출하는 것과 같은 것들을 발견했습니다. 문제는, 내 호스트 윈도우 머신의 Visual Studio Compiler가 리눅스 커널 유틸리티를 알 수 없기 때문에 DLL에 SocketCAN/C++ 프로그램을 컴파일하는 방법을 찾지 못했다는 것입니다.
누군가이 아이디어를 어떻게 해결할 수 있을지 알고 있습니까? 나는 이것에 대한 더 많은 해결책이 있음을 알 수 있지만, 나는 그것을 알 수 없다.
dll로 컴파일 할 필요가 없습니다. 정기적 인 pinvoke를 사용하여 (예를 들어) .so 파일에서 함수를 호출 할 수도 있습니다. – Evk
결국, .so는 Linux 용입니다. Windows 용 .dll은 프로그램에서 사용할 수있는 동적 라이브러리입니다. – xanatos
감사! 내 함수가 들어있는 lib.so 파일을 썼지 만 C# 프로그램에서 호출하려고하면 System.EntryPointNotFoundException이 발생합니다. 내가 어떻게 든 내 생각 엔 [code] extern "C"__declspec (dllexport) [/ code]로 함수를 선언했기 때문이다. 올바른 선언은 무엇입니까? – rele92