Como: Usar servidores COM nativo com TLBIMP
Ao contrário de outras linguagens. NET, Visual C++ fornece recursos de interoperabilidade que permitem que funções não gerenciadas, incluindo interfaces COM, para ser usado diretamente.Isso permite que os desenvolvedores a evitar Tlbimp.exe e suas desvantagens.Para obter mais informações, consulte Usando servidores nativo COM do .NET.
Este tópico demonstra como objetos COM podem ser usado em código gerenciado a Tipo Biblioteca Importer (Tlbimp.exe) ferramenta. Essa ferramenta .NET estrutura, dada uma biblioteca de tipos COM (ou apenas a DLL que contém o componente COM e a biblioteca de tipos) gera um assembly de interoperabilidade gerenciado que pode ser usado a partir de qualquer linguagem .NET.No entanto, essa técnica, especialmente para bibliotecas de tipo COM grandes e/ou complexas, não é recomendada para programadores de Visual C++.
O exemplo a seguir contém as etapas e o código necessário para usar interfaces COM definidos Quartz.dll, que é instalado no diretório Windows/System32 no Windows XP.Essas interfaces encapsulam funcionalidades do DirectShow para permitir a reprodução de arquivos AVI.Para executar o Tlbimp.exe a partir da linha de comando, você precisará adicionar as ferramentas do .NET estrutura para o caminho do sistema executando Sdkvars.bat no diretório C:\programa Files\Microsoft.NET\SDK\v2.0\Bin.
Para gerar o assembly de interoperabilidade
Em uma janela de aviso de comando, no diretório c:\windows\system32, executar o comando tlbimp quartz.dll. (O nome do assembly de interoperabilidade resultante é baseado no nome da biblioteca de tipos COM; nesse caso, o arquivo resultante é QuartzTypeLib.dll.)
Mova o assembly de interoperabilidade para um diretório onde o aplicativo que utiliza será executado.
Exemplo
O código a seguir define um aplicativo de console que usa o assembly de interoperabilidade gerado anteriormente para exibir um arquivo AVI.
executar o arquivo .exe resultante com o nome de um arquivo AVI válido e o arquivo é processado em uma janela.
// AVIPlayer.cpp
// compile with: /clr
#using <QuartzTypeLib.dll>
using namespace QuartzTypeLib;
using namespace System;
void DisplayUsage() {
Console::WriteLine("AVIPlayer: Plays AVI files.");
Console::WriteLine("Usage: AVIPlayer.EXE <filename>");
}
int main() {
array<String^>^ args = Environment::GetCommandLineArgs();
if (args->Length != 2) {
DisplayUsage();
return 0;
}
String^ filename = args[1];
if (filename->Equals("/?")) {
DisplayUsage();
return 0;
}
FilgraphManager^ graphManager = gcnew FilgraphManager();
IMediaControl^ mc = dynamic_cast<IMediaControl^>(graphManager);
mc->RenderFile(filename);
mc->Run();
Console::WriteLine("press any key");
Console::ReadLine();
}