Ir para conteúdo
Fórum Script Brasil
  • 0

Underline no nome da classe na DLL


Thiago Albuquerque

Pergunta

Boa tarde,

Faz uma pouco tempo que estou programando em Visual Basic 6 e tenho uma dúvida. Após a compilação do código, pego a DLL e instalo no Servidor de Componentes.

Após isso, identifiquei que o nome da classe com se encontra dentro da DDL mudou o nome, ou seja, apareceu um "_" antes do nome dela.

Um exemplo:

Nome da classe: MinhaClasse.cls

Após compilada e gerada a DLL, instalo a mesma no servido de componentes e ela fica da seguinte forma: _MinhaClasse

Alguém sabe me responder porque fica desta forma?

Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

não sei, isso não acontece comigo...

o nome da classe na lista de referencias deve ser o nome do projeto onde você compilou a classe. entre em menu Project -> [nome do projeto] Properties... e veja o campo Project Name. não estaria com Underline nesse campo??

ou sera q já não existe uma dll registrada com esse nome, então ele acabou adicionando um _ na frente pra diferenciar??

Link para o comentário
Compartilhar em outros sites

  • 0

Eu olhei nesse caminho que você falou mais não tá com o underline. Lá tem o nome do Projeto.

Em relação a ter outra dll registrada com o mesmo nome da classe eu já fiz essa teste e mas só com uma dll ele aparece com o underline.

O problema não tá no nome do Projeto e sim no nome da classe.

O meu projeto tá assim:

--Teste (Teste.vbp)

-- -- Class Modules

-- -- -- ClasseTeste.cls

Quando eu compilo e registro a classe fica aparecendo assim: _ClasseTeste no servidor.

Não sei mesmo porque essa classe fica desta forma.

Link para o comentário
Compartilhar em outros sites

  • 0

estranho, fiz um projeto assim:

-- ClasseKuroi (classe_kuroi.vbp)

-- -- Class Modules

-- -- -- classe_kuroi (classe_kuroi.cls)

e quando eu registro, me aparece ClasseKuroi na lista de referencias, q é exatamente o nome do meu projeto.

tanto o ProgId quanto o nome da minha classe ficam ClasseKuroi.classe_kuroi (sendo assim, eu conseguiria instanciar meu objeto pelo CreateObject, usando a linha Set x = CreateObject("ClasseKuroi.classe_kuroi")).

sendo assim, não entendi porque ele esta colocando o nome do arquivo cls e ainda adicionando o _ na frente na sua dll.

isso ocorre pra todas as classes q você cria?? qual o SO onde você esta compilando e qual o SO onde você esta registrando?? 32 bits ou 64 bits??

Link para o comentário
Compartilhar em outros sites

  • 0

hum... se possivel, me mande um projeto de dll q você tenha feito pra eu tentar compilar aqui e ver o q acontece.

se der, ponha num site de compartilhamento de arquivo tipo o 4shared e passe o link. e quando eu tiver em casa, eu tento compilar tb no xp pra ver o q acontece. o teste q fiz foi no windows 7 x64.

Link para o comentário
Compartilhar em outros sites

  • 0

estranho, registrei aqui a dll q veio junto com seu .rar sem nem compilar de novo e pra mim apareceu "Teste" normalmente.

a unica coisa estranha q encontrei no seu projeto é q na opcao Project Compatiblity esta setado o caminho todo no desktop do seu sistema o q me causou uma mensagem de erro, enqto q no meu projeto ele escreve somente o nome da dll la. entretanto não sei exatamente qual a funcao dessa opcao.

esse registro eu fiz no windows 7 x64, mas hj mais pra noite eu tento ver como fica no xp e faco mais uns testes.

Link para o comentário
Compartilhar em outros sites

  • 0

Thiago Albuquerque,

Você esta criando um DLL tipo COM. o "_" que aparece é para identificar a interface.

Abaixo a visualização da sua DLL pelo OleView (Que fica no seguinte diretório C:\Program Files\Microsoft Visual Studio\Common\Tools\OLEVIEW.EXE)

// Generated .IDL file (by the OLE/COM Object Viewer)
// 
// typelib filename: Teste.dll

[
  uuid(3CA9B964-CE5B-4EB0-9407-722B522EABB6),
  version(1.0)
]
library Teste
{
    // TLib :     // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
    importlib("stdole2.tlb");

    // Forward declare all types defined in this typelib
    interface _Thiago;

    [
      odl,
      uuid(1408E475-BC4C-4BA4-8157-263657A99899),
      version(1.0),
      hidden,
      dual,
      nonextensible,
      oleautomation
    ]
    interface _Thiago : IDispatch {
        [id(0x60030001)]
        HRESULT GetConnection();
    };

    [
      uuid(F05170AA-4BCB-4987-AC9A-57322AB29C4D),
      version(1.0)
    ]
    coclass Thiago {
        [default] interface _Thiago;
    };
};
Perceba que a classe "Thiago" (coclass Thiago) consta normalmente e a interface consta "_" para diferenciar. Assim a classe "Thiago" faz uso da interface( "[default] interface _Thiago") Isso não irá alterar a chamada em outro programa que use sua DLL. Como exemplo o codigo abaixo que uso sua DLL em outro projeto.
Private Sub Exemplo()

  Set objTeste = New Teste.Thiago
  
End Sub

É padrão esse "_" na interface. Isso não irá apresentar nenhum problema de registro da DLL.

Editado por Crispim
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...