2011-04-07 4 views

답변

0

이것은 내가 찾고 있었던 것입니다 : 그대로

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 이벤트는 문자 배열을 전달합니다.

0

사용 된 프레임 워크에 대해서는 언급하지 않았습니다. 기본적으로 MFC 또는 ATL로 전송됩니다. 최신 버전의 MFC를 사용하면 믹스 앤 매치가 가능하므로 Atl을 추천합니다.

이 목적으로 Atl's CComSafeArray 클래스 템플릿을 살펴보십시오.

그러나 실제로는 텍스트 인 경우 _bstr_t을 사용하여 문자열을 감싸는 것이 좋습니다 (많은 노력을 기울이지 않고 인코딩 변환을 쉽게 수행 할 수 있음). [1]


[1]가 너무 CComBstr 요즘,하지만 난 개인적으로 BSTR 예를 들어,로 /으로 인해 변환에 이후 돌아 오는 길에 _bstr_t 사용과 좋은 경험을 했어

+0

의견을 보내 주셔서 감사합니다. .Net에 데이터에 대한 포인터를 전달하고이를 관리되는 배열로 변환하는 방법이 없습니까? 나는 안전 어레이를별로 좋아하지 않는다. (CComSafeArary에 대해서는 몰랐지만). 그것은 텍스트가 아니며 가능한 많은 오버 헤드를 피하기 위해 많은 양의 데이터 (비디오)입니다. – raven

+0

STL 벡터를 사용할 수 있습니다. IIRC에는 그들과 함께 작동하는 ATL 어댑터가 있습니다 (그러나 오랜 시간이 걸렸습니다). – sehe

+0

감사합니다. 나는 이것을 가능한 한 빨리 살펴볼 것이다! – raven

관련 문제