Un cliente en Extensiones administradas de C++
Ésta es la apariencia que tiene el cliente en Extensiones administradas de C++:
Lista 1. Cliente en Extensiones administradas de C++ (ClientVC.cpp)
#using <mscorlib.dll>
using namespace System;
#using "..\Bin\CompCS.dll"
#using "..\Bin\CompVC.dll"
#using "..\Bin\CompVB.dll"
// The method, main, is the application's entry point.
void main() {
// Iterate through the component's strings,
// and write them to the console.
CompCS::StringComponent* myCSStringComp =
new CompCS::StringComponent();
Console::WriteLine
(L"Strings from C# StringComponent");
for (int index = 0; index < myCSStringComp->Count;
index++) {
Console::WriteLine(myCSStringComp->
GetString(index));
}
// Iterate through the component's strings,
// and write them to the console.
CompVC::StringComponent* myVCStringComp =
new CompVC::StringComponent();
Console::WriteLine
(L"\nStrings from Visual C++ StringComponent");
for (int index = 0; index < myVCStringComp->Count;
index++) {
Console::WriteLine(myVCStringComp->
GetString(index));
}
// Iterate through the component's strings,
// and write them to the console.
CompVB::StringComponent* myVBStringComp =
new CompVB::StringComponent();
Console::WriteLine(L"\nStrings from Visual Basic
StringComponent");
for (int index = 0; index < myVBStringComp->Count;
index++) {
Console::WriteLine(myVBStringComp->
GetString(index));
}
}
Observe en primer lugar la importación de los tres componentes, de modo que ahora cada uno está ubicado en su correspondiente subdirectorio ..\Bin.
#using "..\Bin\CompCS.dll"
#using "..\Bin\CompVC.dll"
#using "..\Bin\CompVB.dll"
Las secciones del código de cliente que llaman a los tres componentes de cadena son idénticas, salvo la especificación de la biblioteca que se va a utilizar. La primera instrucción en cada una de las tres secciones declara una nueva variable local del tipo StringComponent (que se define en el componente), inicializa la variable y llama a su constructor:
CompCS::StringComponent* myCSStringComp =
new CompCS::StringComponent();
Tras escribir una cadena en la consola para indicar que se ha introducido esta parte del programa, el cliente realiza iteraciones en los miembros del componente de cadena apropiado utilizando el valor de la propiedad Count:
for (int index = 0; index < myCSStringComp->Count;
index++) {
Console::WriteLine(myCSStringComp->
GetString(index));
}
Esto es todo lo que se necesita y se repite todo ello para los otros dos componentes de lenguaje.
**Nota **Si hubiera utilizado el enfoque del indizador en lugar del método independiente GetString, el código de llamada
myCSStringComp[index]
hubiera sido más natural.
La generación del nuevo cliente de Extensiones administradas de C++ es sencilla:
cl.exe /clr /Zi /c ClientVC.cpp
link.exe /debug /nod:libcpmt.lib
kernel32.lib mscoree.lib
/out:..\bin\ClientVC.exe ClientVC.obj
Al igual que en el caso de los anteriores ejemplos de Extensiones administradas de C++, se necesita el modificador /clr para indicar al compilador que cree un código administrado de Common Language Runtime. Al ejecutar el programa resultante, el resultado es el siguiente:
C:\...\CompTest\Bin>clientvc
Strings from C# StringComponent
C# String 0
C# String 1
C# String 2
C# String 3
Strings from Visual C++ StringComponent
Visual C++ String 0
Visual C++ String 1
Visual C++ String 2
Visual C++ String 3
Strings from Visual Basic StringComponent
Visual Basic String 0
Visual Basic String 1
Visual Basic String 2
Visual Basic String 3
Vea también
Un cliente en Visual C# | Un cliente en Visual Basic | Un cliente de Windows mediante formularios Windows Forms | Un cliente mediante ASP.NET | Resumen del tutorial sobre la programación | Apéndice A: Herramientas para explorar espacios de nombres