COM 개체 (C++에서 만든)를 사용하는 .NET 응용 프로그램 (특히 VB입니다.COM 배열을 관리되는 코드에 전달하는 방법은 무엇입니까?
C++에서 .Net으로 char 배열을 전달하는 COM 이벤트를 구현해야합니다. 배열을 관리되는 배열로 변환해야한다고 생각합니다. 어떻게해야합니까?
COM 개체 (C++에서 만든)를 사용하는 .NET 응용 프로그램 (특히 VB입니다.COM 배열을 관리되는 코드에 전달하는 방법은 무엇입니까?
C++에서 .Net으로 char 배열을 전달하는 COM 이벤트를 구현해야합니다. 배열을 관리되는 배열로 변환해야한다고 생각합니다. 어떻게해야합니까?
이것은 내가 찾고 있었던 것입니다 : 그대로
Private Sub ComEventHandler(ByVal dataPtr As Integer, ByVal size As Integer) Handles myComObject.OnEvent
Dim managedData(0 To size - 1) As Byte
Dim data As IntPtr = dataPtr
If (size = 0) Then
Marshal.Copy(data, managedData, 0, size)
...
End If
...
End Sub
에서 COM 이벤트는 문자 배열을 전달합니다.
사용 된 프레임 워크에 대해서는 언급하지 않았습니다. 기본적으로 MFC 또는 ATL로 전송됩니다. 최신 버전의 MFC를 사용하면 믹스 앤 매치가 가능하므로 Atl을 추천합니다.
이 목적으로 Atl's CComSafeArray 클래스 템플릿을 살펴보십시오.
그러나 실제로는 텍스트 인 경우 _bstr_t
을 사용하여 문자열을 감싸는 것이 좋습니다 (많은 노력을 기울이지 않고 인코딩 변환을 쉽게 수행 할 수 있음). [1]
[1]가 너무 CComBstr
요즘,하지만 난 개인적으로 BSTR 예를 들어,로 /으로 인해 변환에 이후 돌아 오는 길에 _bstr_t 사용과 좋은 경험을 했어
의견을 보내 주셔서 감사합니다. .Net에 데이터에 대한 포인터를 전달하고이를 관리되는 배열로 변환하는 방법이 없습니까? 나는 안전 어레이를별로 좋아하지 않는다. (CComSafeArary에 대해서는 몰랐지만). 그것은 텍스트가 아니며 가능한 많은 오버 헤드를 피하기 위해 많은 양의 데이터 (비디오)입니다. – raven
STL 벡터를 사용할 수 있습니다. IIRC에는 그들과 함께 작동하는 ATL 어댑터가 있습니다 (그러나 오랜 시간이 걸렸습니다). – sehe
감사합니다. 나는 이것을 가능한 한 빨리 살펴볼 것이다! – raven