2010-04-08 4 views
2

일부 ISO C++ 데이터 유형을 .Net (Linux의 경우 모노)으로 표시합니다.ISO C++ 콜백 (모노)으로 델리게이트 함수 등록하기

내 질문에 모든 C# 및 VB.Net 내 대상 언어를 사용하여 .Net 언어 관련이 있지만 간결하게하기 위해, 내 질문에 C#을 참조합니다.

지금까지 C# 클래스의 ISO C++ 데이터 유형을 모노로 사용하는 방법을 알아 냈습니다. 영리한 분들 덕택입니다.

유일한 문제는 C++ 콜백을 처리하는 방법입니다. .NET 언어 (C# 및 Vb.Net)에서는 '대리자'가 콜백 함수라고 생각합니다.

지금 C#을 고수하고있는 분이라면 누구나 ISO C++ 코드로 C# 대리인 함수를 등록 할 수있는 방법을 권할 만합니까?

ISO C++ 코드는 알림 라이브러리이므로 알림을 모노 프레임 워크 (이 경우 C# 대리자)에 "푸시"할 수 있기를 원합니다.

내 기본 가정은 이것을 구현하는 메커니즘/단계가 .Net 언어와 동일하다는 것입니다. 실제로 .Net 언어로 실제 대리인을 코딩해야합니다. 가정은 맞습니까?

마지막으로 스레드 안전성 문제가 있습니다. 내게 노출되는 기본 ISO C++ 코드 (더 구체적인 모노)는 ntrant와 thread safe 모두입니다. ISO C++ 코드에서 .Net 대리자를 호출하기 위해 "추가"작업을해야합니까?

답변

1

C++에서 정의하고 사용하는 함수 포인터에 C 링키지가 있는지 확인하십시오. 그런 다음 함수 포인터를 인수로 사용하는 C 함수를 내 보내면 C#에서 인수로 대리자를 P/호출 할 수 있습니다.

C++ 측에서 함수 포인터를 정상적으로 호출 할 것입니다.

C 콜백을 호출 할 수있는 한 대리자 개체를 활성 상태로 유지해야합니다. C 콜백이 저장 될 경우 정적 var 또는 유사한 것으로 대리자를 저장하는 것이 좋습니다 등록보다 늦은 시간.

나머지는 시그널 핸들러에서 관리 코드를 안전하게 호출 할 수 없습니다. 관리 코드가 재진입 성 및 스레드 안전성을 갖춘 경우, 델그 게이트/콜백 조합도 마찬가지입니다.

+0

@lupus : 답장을 보내 주셔서 감사합니다. 불행히도, 나는 세션 기반 로그인 정보를 잃어 버린 것으로 보이므로이 대답을 받아 들일 수는 없습니다. 도움이 되더라도 말입니다. – skyeagle

+0

@lupus : 이것을 수행하는 예제를 제공하는 설명서를 가르쳐 주시겠습니까? – skyeagle

+1

나는이 두 링크를 함께 사용하면이 점을 이해할 수 있어야한다고 생각합니다. 첫 번째는 MSDN에서 왔으며 콜백에 대리자를 사용하는 방법에 대한 개요를 제공합니다. 이 두 번째 예제는 GCC/Mono를 사용하는 예제입니다. . – supercheetah