IVsTextLines.GetMarkerData(Int32, Int32, MARKERDATA[]) Method


Returns text marker data for the specified line range within the text buffer.

 int GetMarkerData(int iTopLine, int iBottomLine, cli::array <Microsoft::VisualStudio::TextManager::Interop::MARKERDATA> ^ pMarkerData);
int GetMarkerData(int iTopLine, int iBottomLine, std::Array <Microsoft::VisualStudio::TextManager::Interop::MARKERDATA> const & pMarkerData);
public int GetMarkerData (int iTopLine, int iBottomLine, Microsoft.VisualStudio.TextManager.Interop.MARKERDATA[] pMarkerData);
abstract member GetMarkerData : int * int * Microsoft.VisualStudio.TextManager.Interop.MARKERDATA[] -> int
Public Function GetMarkerData (iTopLine As Integer, iBottomLine As Integer, pMarkerData As MARKERDATA()) As Integer



[in] Top line of the marker data.


[in] Bottom line of the marker data.


[out] Pointer to filled MARKERDATA structure for the range indicated.


If the method succeeds, it returns S_OK. If it fails, it returns an error code.


COM Signature

From textmgr.idl:

HRESULT IVsTextLines::GetMarkerData(  
   [in] long iTopLine,  
   [in] long iBottomLine,  
   [out] MARKERDATA *pMarkerData  

Use this method with GetLineData to determine the marker data for a given range in the text buffer. After you call IVsTextLines.GetMarkerData, you then need to call ReleaseMarkerData to allow the text buffer to clean up the MARKERDATA structure.

GetMarkerData in Managed Code

GetMarkerData can cause problems in managed code. The GetMarkerData implementation that you do not Release the pLayer member. Thus, it does not perform an AddRef on the interface. There is no problem in native C++ so long as you do not call Release In managed code you cannot control when a Release is done. To be safe, you should do an AddRef on the pLayer member after GetMarkerData fills in the data structure. The simplest way to do this is with GetIUnknownForObject:


MARKERDATA[] markerData = new MARKERDATA[1];  
markerData[0] = new Microsoft.VisualStudio.TextManager.Interop.MARKERDATA();  
buffer.GetMarkerData(line, line, markerData);  
IntPtr dummyAddRef = Marshal.GetIUnknownForObject(markerData[0].pLayer);  

Applies to