Desenvolvimento de DLL Com Visual Studio 2008

Programação C em geral

Moderadores: 51, guest2003

Desenvolvimento de DLL Com Visual Studio 2008

Mensagempor v01d » 12 Mai 2010 10:11

Opa,

Sempre utilizei o Visual C++ 6.0 para gerar DLLs que são utilizadas com outras linguagens. Peguei um fonte desses, e compilei com o Visual Studio 2008. A compilação foi OK, e tal.

Mas não consigo acessar essa DLL com outra linguagem de jeito nenhum. Tentei nas configurações do 2008, uma opção para geração da .LIB contendo os simbolos (isso já resolveu alguns problemas antes). Mas não consegui achar tal opção.

Simplesmente, o compilador da outra linguagem não consegue achar as funções dentro da DLL.

Notem que não estou usando nenhum componente/função da framework, apenas chamadas a win32. Esse não foi o problema, pois não tenho nenhuma dependência com a Framework. A DLL que eu compilava com o Visual C++ 6.0, não precisava ser Registada nem nada disso. Sua funções podiam ser acessadas de qualquer linguagem de programação.

Alguém pode me ajudar,

vlw
v01d
Avatar do usuário
v01d
Bit
 
Mensagens: 7
Registrado em: 14 Jan 2010 18:00

Mensagempor tcpipchip » 12 Mai 2010 12:24

Voce registrou a DLL antes ?

Aqui tem um material muito bom

http://www.experts-exchange.com/Program ... 45237.html
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor vtrx » 12 Mai 2010 12:36

Qual o 'calling convention' que esta usando na DLL?
Está usando '__stdcall ' e não '__cdecl'?
Esta usando a opção "DEF " na compilação?
Posta o link para pegar a DLL para analizar como estão as convenções.
Editado pela última vez por vtrx em 12 Mai 2010 12:42, em um total de 2 vezes.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor v01d » 12 Mai 2010 12:40

opa tcp,

Não. Mas eu também não efetuava o registro da .DLL quando a compilava com o Visual C++ 6.0, porque não se trata de um COM, apenas de uma DLL com funções exportadas.

Logo, bastava coloca-la no mesmo diretório da aplicação que a chamava, ou no Windows/System.

Quando a compilo com vc 6.0 funciona perfeitamente, mas quando gero a dll a partir do mesmo projeto como vs c++ 2008, simplesmente dá problema nas chamadas das funções.

Alguma idéia ?
v01d
Avatar do usuário
v01d
Bit
 
Mensagens: 7
Registrado em: 14 Jan 2010 18:00

Mensagempor v01d » 12 Mai 2010 12:49

vtrx escreveu:Qual o 'calling convention' que esta usando na DLL?
Está usando '__stdcall ' e não '__cdecl'?
Esta usando a opção "DEF " na compilação?
Posta o link para pegar a DLL para analizar como estão as convenções.


Dessa forma aqui,
int _stdcall xDLLT_Add(void);
int _stdcall xDLLT_Mostra(void);
int _stdcall xDLLT_Finaliza(void);
int _stdcall xDLLT_Pegar(PTSTR lpcstrPorta);
int _stdcall xDLLT_Altera(void);

Sempre criei DLLs sem problemas. Não achei a opção de geração de .DEF dentro da IDE. Muito menos, da .LIB.

De qualquer forma, como as linguagens que são usadas para as funções da DLL, parecem não utilizar nenhum dos tipos de arquivo. Não estou chamando dentro de outro compilador C/C++.

São chamadas, que me parecem, similar a later bind, sacou ?
v01d
Avatar do usuário
v01d
Bit
 
Mensagens: 7
Registrado em: 14 Jan 2010 18:00

Mensagempor vtrx » 12 Mai 2010 12:57

Não programo em Visual C++,mas ja usei várias DLL compiladas nele no BCB e tive que fazer várias conversões e importações.
Verifique o Header da DLL se contém '__declspec(dllimport) void <convention>
',em 'convention' deve estar '__stdcall ' para facilidade de uso em qualquer compilador.Se não estiver especificado,o Default é '__cdecl '.
se puder poste um Link com a DLL,resolvendo isto sua DLL vai poder ser usado por qualquer um (se lhe interessar isso).
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor v01d » 12 Mai 2010 13:10

vtrx escreveu:Não programo em Visual C++,mas ja usei várias DLL compiladas nele no BCB e tive que fazer várias conversões e importações.
Verifique o Header da DLL se contém '__declspec(dllimport) void <convention>
',em 'convention' deve estar '__stdcall ' para facilidade de uso em qualquer compilador.Se não estiver especificado,o Default é '__cdecl '.
se puder poste um Link com a DLL,resolvendo isto sua DLL vai poder ser usado por qualquer um (se lhe interessar isso).


Estou separando ela aqui e vou postar,

Mas aí é que está. A convenção está correta. A mesma DLL quando compilada com o VC 6 pode ser usada no BCB tb. Conheço as convenções que devem ser usadas no BCB. Até aí não tem problema algum.

Mas quando compilo como VS, naun funfa de jeito nenhum, nem no mesmo código em BCB.

Aí é que está o problema. É como se o VS 2008, estive deixando de gerar alguma coisa (simbolo ou etc) ou se o arquivo .DLL que ele gera não é no padrão DLL microsoft para bibliotecas dinâmicas.

Já experimentei erros similiares no passado, mas tem a ver com usar a DLL em outro compilador C, sem o .LIB correspondente.
v01d
Avatar do usuário
v01d
Bit
 
Mensagens: 7
Registrado em: 14 Jan 2010 18:00

Mensagempor vtrx » 12 Mai 2010 13:20

Se funciona no BCB então não precisa nem postar o link pois é algo no Visual 2008,como não o utilizo não vai adiantar muito,de uma pesquisada no Google,em links em Ingles'para ver se acha algo.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor v01d » 12 Mai 2010 13:22

vtrx escreveu:Se funciona no BCB então não precisa nem postar o link pois é algo no Visual 2008,como não o utilizo não vai adiantar muito,de uma pesquisada no Google,em links em Ingles'para ver se acha algo.


Já fiz isso ... rs... Santo google ... mas naum tive muito sucesso. Parece que quando se procura DLL em vs 2008, nunca é discutido esse assunto e sim outros ... como no caso das dependências e etc.

Mas vlw mesmo assim,

um abraço
v01d
Avatar do usuário
v01d
Bit
 
Mensagens: 7
Registrado em: 14 Jan 2010 18:00


Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitantes

x