Pergunta

Em primeiro lugar,

Usando simples C ++, sem ATL, MFC tentar interface de uso do objeto COM.

Usando OLEVIEW (OLE / COM visualizador de Object) -. Usado para projetar o código IDL

Nesta fase, usando MIDL Compiler, agora eu estou tendo problemas para tentar produzir o seguinte:

A sintaxe na linha cmd:

midl / nologo / env win32 / tlb "\ S8_.tlb" / h "\ S8_.h" / iid "\ S8_i.c" S8.idl

  • A .TLB correspondente (Type Library)
  • A .H (cabeçalho)
  • definições
  • Um IID arquivo de inclusão (* _i.c)
  • Um proxy (* _p.c)

MIDL erro do compilador:

S8.IDL (513): Erro MIDL2025: erro de sintaxe: esperando uma especificação do tipo de perto "S8SimObject"

    HRESULT LinkSimObjects(
                    [in] S8SimObject* SourceObject, ####line 513 ####
                    [in] S8SimObject* DestObject,
                    [in] float TravelTime);
Foi útil?

Solução 2

MIDL compilador erro

S8.IDL (513): Erro MIDL2025 : erro de sintaxe: esperando uma especificação do tipo de perto "S8SimObject"

RESOLVIDO

Adicionar um declaração para a frente - na parte superior do arquivo IDL:

  • importação "Ocidl.IDL";
  • interface de S8SimObject;

Outras dicas

Bem, eu realmente não entendo a sua pergunta aqui, mas a seguir deve ajudar:

  • definições enum Pública precisa ter seu próprio UUID para ser realmente público.
  • Eu vi que essas definições enum não ir para a biblioteca tipo a menos que eles são realmente utilizados em algum método de interface. Eu não sei a razão para isso, provavelmente eu perdi alguma coisa simples (como acrescentando que enum a um bloco de biblioteca, ou qualquer outro).
  • short normalmente significa um número inteiro curto, não um de precisão simples número de ponto flutuante.
  • O equivalente a float é single em VB, mas como eu vi em outras questões de você, eu suspeito que você realmente significou substituir single com float.

A propósito, eu recomendo para deixar um mínimo (compilable) IDL arquivo (despojado da maioria das definições), que se assemelha mais ou menos o que você está tentando compilar. Isso ajuda contra alguma confusão, como você está, por exemplo, usando IS8Simulation em seu texto, mas S8SimObject em sua IDL copiado trecho. E seria também ajuda se você especificar o resultado esperado, eo erro inesperado (para você).

Editar

Bem, este erro de compilação agora inserido é simples: S8SimObject não está definido. Você precisa se referem sempre à interface nas declarações de método (IS8Simulation), para nunca mais o coclass que implementa a interface.

Como você disse que você está mudando um arquivo IDL existente aqui: Qual é o objetivo básico? Se o arquivo IDL originais sempre usa S8SimObject, talvez o único problema é que a definição de S8SimObject não está incluído no topo do arquivo IDL? Se você tem a biblioteca tipo definindo S8SimObject ao redor, você pode exportar o IDL desta interface usando OleView.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top