Hoofdstuk 13 - Les 2

De System.Runtime.InteropServices namespace biedt verschillende attributen aan die gebruikt kunnen worden om het standaard gedrag aan te passen als een .NET type wordt geëxporteerd voor COM applicaties.
class SecretClass
{
public SecretClass()
{}

[ComVisible(false)]
public int Method1(string param)
{
return 0;
}

public bool Method2()
{
return true;
}

[ComVisible(false)]
public int Property1
{
get {return _myProperty; }
}
}
Method1 en Property1 zijn nu niet zichtbaar voor COM.

De Type Library Exporter (tlexp.exe) maakt een COM type library voor een assembly: tlbexp MyAssembly.dll. Dit commando genereert een nieuw type library met de tlb extensie. gebruik de /out parameter om een andere bestandsnaam op te geven.

Om COM clients .NET classes te laten maken zonder expliciet in te laden, moet de assembly of type geregistreerd worden. Dat kan in Visual Studio of door de Assembly Registration Tool (Regasm.exe).

Op de manier dat .NET exceptions gooit als er iets fout gaat, zo werkt COM met HRESULT waarden. .NET vertaald veel HRESULT waarden in exceptions, zo is wordt COR_E_IO HRESULT vertaald in een IOException.

Het MarshalAs attribuut kan gebruikt worden om een return value, field of parameter te converteren naar een niet-standaard COM type.

// Marshal een parameter met type string naar LPStr
void MyMethod([MarshalAs(LPStr)] String s)

// Marshal de return value
[return: MarshalAs(UnmanagedType.LPWStr)]
public string SayHi()
{
return "Hello, world!";
}

// Marshal een property
class Demo
{
[MarshalAs(UnmanagedType.LPWStr)]
public string txt;
}

Reacties

Populaire posts van deze blog

[SQL Server] varchar vs nvarchar

MS Sql 70-461: Chapter 5

[C#] Class serialiseren en deserialiseren