Como fazer o Excel funcionar como um Servidor DDE

Escrito por martin cole | Traduzido por wanderson david
  • Compartilhar
  • Tweetar
  • Compartilhar
  • Pin
  • E-mail
Como fazer o Excel funcionar como um Servidor  DDE
Criando um Servidor DDE para aprimorar o fornecimento de dados (Jupiterimages/Polka Dot/Getty Images)

"Dynamic Data Exchange - DDE" (troca dinâmica de dados) é um protocolo de comunicação que dá às aplicações do Windows as ferramentas para trocar dados automaticamente. Fazer uma aplicação que fornece dados para os programas, como o Excel, é o uso principal do DDE. Se você tinha um programa que foi mantido com cotas de mercado de suporte enquanto se sucedia, por exemplo, o DDE poderia permitir ao usuário do Excel ver aquela informação e reportá-la corretamente em seus cálculos. Seja qual for a sua razão, criar um servidor básico DDE é desafiador, mas com certeza suscetível.

Nível de dificuldade:
Moderadamente desafiante

Outras pessoas estão lendo

O que você precisa?

  • Windows NT 4.0

Lista completaMinimizar

Instruções

    Construa um servidor DDE

  1. 1

    Abra o "Visual C++ 6.0" e inicie um "Novo Projeto".

  2. 2

    Clique em "Win32Application" para selecioná-lo com o tipo de projeto, em seguida o nomeie como "DdemlSvr.". Selecione "Um Projeto Vazio" quando solicitado pelo tipo de projeto que você deseja.

  3. 3

    Adicione um arquivo chamada "main.cpp." em seu projeto.

  4. 4

    Copie o código seguinte:

    include <windows.h>

    include <stdio.h>

    include <ddeml.h>

    // Variáveis lobais... HSZ g_hszAppName; HSZ g_hszTopicName; HSZ g_hszItemName; int g_count = 0; DWORD g_idInst = 0;

    // Declarações: HDDEDATA EXPENTRY DdeCallback(UINT type, UINT fmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hData, DWORD dwData1, DWORD dwData2);

    // WinMain().. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

    // Inicializa DDEML... if(DdeInitialize(&g_idInst, DdeCallback, APPCLASS_STANDARD, 0)) { MessageBox(NULL, "DdeInitialize() failed", "Error", MB_SETFOREGROUND); return -1; }

    // Criando handles de strings... g_hszAppName = DdeCreateStringHandle(g_idInst, "DdemlSvr", NULL); g_hszTopicName = DdeCreateStringHandle(g_idInst, "MyTopic", NULL); g_hszItemName = DdeCreateStringHandle(g_idInst, "MyItem", NULL);

    if( (g_hszAppName == 0) || (g_hszTopicName == 0) || (g_hszItemName == 0) ) { MessageBox(NULL, "DdeCreateStringHandle() failed", "Error", MB_SETFOREGROUND); return -2; }

    // Registra servidor DDE if(!DdeNameService(g_idInst, g_hszAppName, NULL, DNS_REGISTER)) { MessageBox(NULL, "DdeNameService() failed!", "Error", MB_SETFOREGROUND); return -3; }

    // Cria um timer para simular troca de dados... SetTimer(0,0,1,0);

    // Loop de mensagem: MSG msg;

    while (GetMessage(&msg, NULL, 0, 0)) { // On WM_TIMER, change our counter, and update clients... if(msg.message == WM_TIMER) { g_count++; DdePostAdvise(g_idInst, g_hszTopicName, g_hszItemName); } TranslateMessage(&msg); DispatchMessage(&msg); }

    return msg.wParam; }

    // Nossa função de Callback DDE... HDDEDATA EXPENTRY DdeCallback(UINT wType, UINT fmt, HCONV hConv, HSZ hsz1, HSZ hsz2, HDDEDATA hData, DWORD dwData1, DWORD dwData2) {

    switch (wType) {

    // ---------------------------------------------------------------- case XTYP_CONNECT: // O cliente está tentando conectar. Responde TRUE se tivermos o que ele quer... if ((!DdeCmpStringHandles(hsz1, g_hszTopicName)) && (!DdeCmpStringHandles(hsz2, g_hszAppName))) return (HDDEDATA)TRUE; // SERVER dá suporte a Topic|Service return FALSE; // SERVER não dá suporte a Topic|Service

    // ---------------------------------------------------------------- case XTYP_ADVSTART: // Cliente iniciando advisory loop // Diz "ok" se a gente tem o que eles estão perguntando...

    if((!DdeCmpStringHandles(hsz1, g_hszTopicName)) && (!DdeCmpStringHandles(hsz2, g_hszItemName))) return (HDDEDATA)TRUE; // SERVER dá suporte a Topic|Service return FALSE; // SERVER não dá suporte a Topic|Service // ----------------------------------------------------------------

    case XTYP_ADVREQ:

    // O cliente quer nossos dados. Como aqui se trata especificamente de Excel, vamos seguir em frente e assumir que ele quer dados formatados em XITable. Para um servidor DDE genérico, talvez você queira manusear vários formatos específicos pelo parametro em fmt passado.

    if(!DdeCmpStringHandles(hsz1, g_hszTopicName) && !DdeCmpStringHandles(hsz2, g_hszItemName)) {

    short xltableData[100];

    // tdtTable record... xltableData[0] = 0x0010; // tdtTable xltableData[1] = 4; // 2 short ints following xltableData[2] = 1; // # rows xltableData[3] = 1; // # cols

    // tdtInt record... xltableData[4] = 0x0006; xltableData[5] = 2; xltableData[6] = (short)g_count;

    return DdeCreateDataHandle(g_idInst, (UCHAR)xltableData, 27, 0, g_hszItemName, fmt, 0); } // ---------------------------------------------------------------- default: return (HDDEDATA)NULL; } }

  5. 5

    Cole o código dentro do arquivo "main.cpp" que você criou.

  6. 6

    Compile e então inicie o projeto.

    Teste seu Servidor

  1. 1

    Aperte "Ctrl" + "Shift" + "Esc" para trazer o "Gerenciador de Tarefas do Windows" e em seguida selecione a aba "Processos".

  2. 2

    Certifique-se de que o "DdemlSvr.exe" é uma das aplicações rodando em sua lista.

  3. 3

    Inicie o "Excel" e digite "=DdemlSvr|MyTopic!MyItem" em uma célula. Ela deve então conter o valor crescente da "g_count".

    Use o Servidor remotamente

  1. 1

    Faça o “DdemlSvr.exe” funcionar em uma máquina Windows NT 4.0 que está conectada a uma rede. Então inicie o "DdeShare" a partir da linha de comando.

  2. 2

    Clique em "Compartilhamentos" no menu que aparece e então em "Compartilhamentos DDE", seguido pelo "Adiciona um compartilhamento".

  3. 3

    Coloque os seguintes valores abaixo do "Nome da Aplicação":

    Share Name: MyShare$ Old Style: DdemlSvr.DDE New Style: DdemlSvr.OLE Static: DdemlSvr

  4. 4

    Vá em "Meu tópico" dentro das três caixas debaixo de "Nome do Tópico". Selecione "OK".

  5. 5

    Clique em "MyShare$" e em seguida "Compartilhamento de confiança" e após isto clique na caixa "Iniciar Permissão da Aplicação". Selecione "OK" em todas as caixas de diálogo e então saia do "DdeShare".

  6. 6

    Faça o Excel funcionar em uma máquina com um windows NT 4.0 diferente, mas na mesma rede.

  7. 7

    Copie o seguinte:

    ='\SERVERNAME\NDDE$'|'MyShare$'!MyItem

  8. 8

    Cole o que você copiou em uma célula do Excel. Substitua o "Nome do Servidor" com o nome da sua máquina de Servidor de rede. Você deve ver um número se aumentando rapidamente na célula.

Não perca

Filtro:
  • Geral
  • Artigos
  • Slides
  • Vídeos
Mostrar:
  • Mais relevantes
  • Mais lidos
  • Mais recentes

Nenhum artigo disponível

Nenhum slide disponível

Nenhum vídeo disponível