Jump to content
Fórum Script Brasil
  • 0

Underline no nome da classe na DLL


Thiago Albuquerque

Question

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 to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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.

Edited by Crispim
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...