eroare la linkeditare

Intrebari despre programarea cu VC++ incluzand mediul de dezvoltare, instalare, setari, debugger, compilator, linker si documentatie.
dacul
Junior
Junior
Posts: 37
Joined: 27 Jul 2007, 12:02

eroare la linkeditare

Post by dacul » 05 Sep 2007, 14:37

Ma tot chinui sa-mi linkeditez si eu dll-ul si linkerul imi zice ca nu poate rezolva un symbol extern
Aceasta e eroarea:Error 15 error LNK2019: unresolved external symbol "int __cdecl vncEncryptPasswd(char *,char *)" (?vncEncryptPasswd@@YAHPAD0@Z) referenced in function "int __stdcall cryppasswd(char *,char *)" (?cryppasswd@@YGHPAD0@Z) vnclib.obj

Acesta e codul dll
#include "d3des.h";
#include "vncauth.h";
//#include <strings.h>;
//#include "stdafx.h";
#ifdef _MANAGED
#pragma managed(push, off)
#endif

//BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
//
//{
// return TRUE;
//}

int _stdcall cryppasswd(char *passwd, char *encryptedPasswd)
{
return vncEncryptPasswd(passwd, encryptedPasswd);


}

#ifdef _MANAGED
#pragma managed(pop)
#endif

Functia vncencrypt e in hederul vncauth.Nu-mi dau seama care e buba.Recunosc ca eu lucrez cu dit netul mai putin cu c/c++
Multumesc mult



User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: eroare la linkeditare

Post by Marius Bancila » 05 Sep 2007, 16:43

Pai nu ai adaugat lib-ul in lista de biblioteci referite. Fie faci asta de la Project Settings > Linker, Additional Input Libraries sau cu un pragma:

Code: Select all

#pragma comment(lib, "nume_bilbioteca.lib")
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

dacul
Junior
Junior
Posts: 37
Joined: 27 Jul 2007, 12:02

Re: eroare la linkeditare

Post by dacul » 05 Sep 2007, 18:05

Marius Bancila wrote:Pai nu ai adaugat lib-ul in lista de biblioteci referite. Fie faci asta de la Project Settings > Linker, Additional Input Libraries sau cu un pragma:

Code: Select all

#pragma comment(lib, "nume_bilbioteca.lib")
Multumesc

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: eroare la linkeditare

Post by Marius Bancila » 05 Sep 2007, 18:11

Daca ai doua bibliteci statice, una pentru debug si una pentru release, sa zicem svn.lib si svnD.lib, poti face asa:

Code: Select all

#ifdef _DEBUG
#pragma comment(lib, "svnD.lib")
#else
#pragma comment(lib, "svn.lib")
#endif
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

dacul
Junior
Junior
Posts: 37
Joined: 27 Jul 2007, 12:02

Re: eroare la linkeditare

Post by dacul » 06 Sep 2007, 12:22

nu mers cu pragma .Eu am vs 2005 si nu am gasut setarea aia in settings

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: eroare la linkeditare

Post by Dragos Cojocari » 06 Sep 2007, 12:37

Cel mai probabil nu a mers din cauza ca VS 2005 nu gaeste svn.lib. Ai mai multe solutii:
- pui calea completa in instructiune( bleaks)
- adaugi directorul librariei in lista directoarele de lib de la VS 2005
- copiezi lib-ul in unul din directoarele deja trecute in acea lista ( bleaks din nou).

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: eroare la linkeditare

Post by Marius Bancila » 06 Sep 2007, 13:17

dacul wrote:nu mers cu pragma .Eu am vs 2005 si nu am gasut setarea aia in settings
Path-ul foldere-lir unde ai lib-urile le adaugi la (grija sa fie pentru toate configuratiile)
Properties > Configuration Properties > Linker > General > Additional Library Directories

Lib-urile le poti adauga la
Properties > Configuration Properties > Linker > Input > Additional Dependencies
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

dacul
Junior
Junior
Posts: 37
Joined: 27 Jul 2007, 12:02

Re: eroare la linkeditare

Post by dacul » 06 Sep 2007, 15:20

Am pus nu merge.
Singurul mod in care am compilat dll e sa pun de avalma totul in vnclib.cpp,care e mainul dll-ului da nu mi se pare o chestie ok.
Multumesc

User avatar
Hannibal
Membru
Membru
Posts: 104
Joined: 30 Jul 2007, 15:18
Location: Bucuresti
Contact:

Re: eroare la linkeditare

Post by Hannibal » 06 Sep 2007, 15:35

Pai tu lucrezi cu sursele lib-ului pentru vnc? Nu ai un header, un lib si un dll pe care vrei sa le folosesti in aplicatia ta?
Last edited by Hannibal on 06 Sep 2007, 15:36, edited 1 time in total.
For the End of the World spell, press control, alt, delete.

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: eroare la linkeditare

Post by Marius Bancila » 06 Sep 2007, 15:35

Ce, inca iti mai da eroare? Esti sigur ca linkezi cu biblioteca corecta?
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: eroare la linkeditare

Post by Dragos Cojocari » 06 Sep 2007, 16:20

Vezi ca mai poti avea probleme si in cazul in care call convention in aplicatia ta e diferit de cel al librarieri si header-ul librariei nu specifica asta corect.

dacul
Junior
Junior
Posts: 37
Joined: 27 Jul 2007, 12:02

Re: eroare la linkeditare

Post by dacul » 06 Sep 2007, 20:42

Sa va explic despre ce e vorba.In cadrul unei aplicatii de net admin una din taskuri era si chestia asta setarea passwordului de vnc e vorba de vnc-ul free opensource.
Am urmat sfaturile de aici http://itboard.ro/forums/16163/ShowThread.aspx#16163
Si am facut cu vs un dll unmaged in care export functia de cryptare a parolei.Pur si simplu am definit un project vs 2005 in care am inclus headerele alea.Iar in fiserul main in care e dll am facut un wrapp la functia vncpasswdencryot din vncauth .h
Uitati coduk fisierului vnclib.cpp care e fdll

#include "vncauth.h";

#ifdef _MANAGED
#pragma managed(push, off)
#endif
//BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
//
//{
// return TRUE;
//}
int _stdcall cryppasswd( char *passwd, char *encryptedPasswd)
{
return vncEncryptPasswd(passwd, encryptedPasswd);
}
#pragma comment(lib, "vnclib.lib")

#ifdef _MANAGED
#pragma managed(pop)
#endif

Codul compileaza ok dar la linkeditare obtin erorile alea.
AM gasit o rezolvare in sensul ca am inclus tot din vnauth.h si am putut sa fac dll,dar nu mi se pare ok si as vrea sa stiu care e buba.
AMm reusit sa folosesc dll-ul ala compilat adik sa apelez functia de cryptare din aplicatia mea car e in delphi.
MUltumesc

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: eroare la linkeditare

Post by Marius Bancila » 06 Sep 2007, 21:06

Intrebare: VNC-ul asta vibe sub forma de bilbioteci statice? De ce a trebuit sa faci un DLL cu o functie wrapper in C++ pentru o alta functie scrisa in C++?
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

dacul
Junior
Junior
Posts: 37
Joined: 27 Jul 2007, 12:02

Re: eroare la linkeditare

Post by dacul » 06 Sep 2007, 21:38

Vine numaoi cu sursele.Am facut asta pt ca aplicatia mea e scrisa delphi adica pascal si mi s-a parut mult mai usor decat sa rescriu algoritmul ala in pascal mai ales ca aces dll poate fi reutilizat si de alte aplicatii cine stie

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: eroare la linkeditare

Post by Marius Bancila » 06 Sep 2007, 23:04

Da, ok, am inteles. Dar lib-ul de unde il ai, daca vine doar cu sursele? Le-ai compilat tu?
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

Post Reply