Página 1 de 1

Desenvolvimento de DLL Com Visual Studio 2008

MensagemEnviado: 12 Mai 2010 10:11
por v01d
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

MensagemEnviado: 12 Mai 2010 12:24
por tcpipchip
Voce registrou a DLL antes ?

Aqui tem um material muito bom

http://www.experts-exchange.com/Program ... 45237.html

MensagemEnviado: 12 Mai 2010 12:36
por vtrx
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.

MensagemEnviado: 12 Mai 2010 12:40
por v01d
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 ?

MensagemEnviado: 12 Mai 2010 12:49
por v01d
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 ?

MensagemEnviado: 12 Mai 2010 12:57
por vtrx
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).

MensagemEnviado: 12 Mai 2010 13:10
por v01d
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.

MensagemEnviado: 12 Mai 2010 13:20
por vtrx
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.

MensagemEnviado: 12 Mai 2010 13:22
por v01d
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