Pergunta

Eu escrevi um controlador de dispositivo (RS232) e está sendo utilizado com sucesso, no entanto os usuários querem ver os dados e controlar o dispositivo (ou talvez comunicar através de meu programa) do Excel. Eu demiti DDE como uma opção e descobriu que RTD (IRTDServer) é provavelmente um bom começo (embora nenhuma maneira para enviar dados de volta para o "servidor" do cliente de dados em tempo real).

Eu encontrei esses recursos para a parte de IDT: http://support.microsoft.com/?id=327215 e http://support.microsoft.com/?id=327215

Este é um aplicativo de multi-threaded e eu já tinha adicionado a capacidade de ter vários ouvintes na porta COM para que eu pudesse atualizar vários clientes. Vou acrescentar a interface COM para o EXE.

Mas o que eu preciso depois que é alguma forma de controlar a minha app / proxy comandos para o dispositivo através do meu aplicativo do Excel.

Qual seria a melhor maneira de fazer isso?

Talvez uma outra interface COM e chamá-lo de VBA ou algo assim? Eu não estou familiarizado com o uso de scripting do Excel, por isso, talvez alguém pode provice código de exemplo ou links que mostram tanto o código para um objeto COM eo código que acompanha VB (A?)?

Tenha em mente que este é um aplicativo não gerenciado C ++ e não pode ser convertido em geridos ou C # agora. Alternativas usando C # são bem-vindas, mas que é uma reescrita de longo prazo.

Graças

EDIT Eu tenho uma alternativa para adicionar suporte COM no EXE existente. Eu acho que é mais flexível para adicionar uma comunicação bidirecional (multiplataforma - talvez aumentar ou corba ou simplesmente IP direto baseado com o meu próprio protocolo de mensagem)

Um servidor COM (ou dois) pode envolver esse canal de comunicação - seja o que for. Este doesn; t afetar realmente a minha pergunta em tudo - eu ainda gostaria de saber as opções para controlar um EXE externo do Excel

.

EDIT Não ter que rolar para fora .NET para os clientes também é uma grande vantagem. muitos destes dispositivos estão em PCs que são bastante antiga e talvez tenham NT ou XP sobre eles e eu não relish aumentando minha configuração / instalar o pacote de 700KB para o .NET ridículo instalar tamanho ...

Foi útil?

Solução

Opção # 1:

Crie um servidor COM pequena - certificar-se de suas interfaces são adequados para execução de scripts com o motor do Visual Basic construído em Excel. (Por exemplo, utilizar tipos simples e BSTRs).

Write Excel VB macros para (1) adicionar a sua própria barra de ferramentas para excel e (2) chamar o servidor COM.

Você também pode adicionar botões e outros elementos da interface de folhas e ligá-los-los até macros VB.

Opção # 2:

Eu percebo que você não quer usar C # - mas automatizar escritório, e conversar com objetos COM é muito, muito fácil em C # com Visual Studio Tools for Office (VSTO). Você shoul realmente olhar para esta opção - Se feito corretamente, não deve significar re-escrever algum de seu código existente. Basta usar C # e VSTO como uma ponte entre o Excel e o servidor RTD. Tal como acontece com VB, seu perverso direto para conectar elementos de interface do usuário em Excel para C # e, em seguida, para o servidor RTD.

Outras dicas

Como chamar um objeto COM de VBA é simples. Este SO Pergunta e minha resposta dar um exemplo de como criar um objeto cOM. Chamar métodos expostos é como seria de esperar:

object.ExposedMethod(optional params...);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top