Linker Fehler LNK2001
-
Hallo,
ich schon wieder :-/. Ich hab jetzt schon etliche Stunden gesucht woran es liegen kann, finde aber die Lösung nicht.
Ich bekomme die Fehlermeldungen
error LNK2001: Nicht aufgelöstes externes Symbol ""int __stdcall AfxMessageBox(char const *,unsigned int,unsigned int)" (?AfxMessageBox@@YGHPBDII@Z)".
und
error LNK2001: Nicht aufgelöstes externes Symbol ""wchar_t * __cdecl Piece(wchar_t const *,wchar_t *,int,char,int)" (?Piece@@YAPA_WPB_WPA_WHDH@Z)".
Die bekomme ich in mehreren Klassen. Und kann somit auch nicht wirklich sagen an welcher Codestelle es hängen könnte. Aus dem Grund verzichte ich erst mal auf das Posten von Quellcode, liefere aber natürlich gerne nach wenn jemandem das weiterhelfen würde.
-
Was AfxMessageBox angeht...
Mehrere Möglichkeiten.
Wenn dein Programm aus mehreren Projekten besteht wurden vielleicht nicht alle auf Unicode umgestellt.
Sonst würde ich vermuten dass es irgendwo - warum auch immer - eine eigene Deklaration vonAfxMessageBox
mitconst char*
(LPCSTR
) gibt. Und diese Version vonAfxMessageBox
wird dann auch irgendwo aufgerufen.Was Piece angeht, das ist wohl ne Funktion aus deinem Programm.
Da werden Deklaration und Definition nicht zusammenstimmen. Also Deklaration mitwhcar_t
und Definition mitchar
.
-
Die Definitionen die ich von beiden habe sind
int AFXAPI AfxMessageBox(LPCSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0); int AFXAPI AfxMessageBox(UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT)-1); int AFXAPI AfxMessageBox(LPCWSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0);
Und
extern LPTSTR Piece(LPCTSTR source, wchar_t* piece, int part, char trenn, int iPieceLength=4096);
Ich ging jetzt davon aus das ich wchar_t oder auch char in die LP..STR geben kann.
Die Umstellung des Projektes habe ich über das Projekteigenschaften Fenster gemacht, und da dann auf Unicode Zeichensatz umgestellt. Danach habe ich mich durch die Fehlerlisten gearbeitet. Natürlich will ich nicht abstreiten das mir dabei Fehler unterlaufen sind.
Der Code Kompliert jetzt zwar aber wenn der Linker noch jault muss ja noch was im Argen sein. Hab ich da irgendwie eine Chance aus den Linker Fehlermeldungen rauszusuchen wo das Problem liegt, oder muss ich jeden einzelnen Aufruf der Funktionen per Hand durch gehen?
-
Ich hab jetzt noch mal geguckt was die Funktion Piece angeht. Dort wird im Code eigentlich bis auf wenige Ausnahmen immer nur ein CString übergeben.
Liegt da vielleicht eins meiner Problem.
-
Korrekt wäre
int AFXAPI AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );
Also schmeiss die
LPCSTR
undLPCWSTR
Versionen weg und verwende statt dessen nur eine Deklaration mitLPCTSTR
. Wieso enthält dein Programm überhaupt eigene Deklarationen fürAfxMessageBox
?Und was
Piece
angeht: Mit was das aufgerufen wird ist erstmal egal. Wie sieht die Implementierung aus?
-
Wo kommt Piece her? Müsste es vielleicht extern "C" deklariert sein?
-
Das wäre dann einmal die Funktion Piece. Das mit der Afx Fehler ist schon mal weg
LPSTR Piece(LPCTSTR source, char* piece, int part, char trenn, int iPieceLength) { // Tracking if (theApp.m_ia.bProtocolAll) Tracking(_T("$Piece(\"%s\",\"%c\",%d)"), PIECE, source, trenn, part); int iMaxSource = _tcslen(source); //Tracking if ((theApp.m_ia.bProtocol)&&(iMaxSource>iPieceLength)) Tracking(_T("$Piece-Fehler Größe source %d - Größe Array %d - Piece-Teil %d"), PIECE, iMaxSource, iPieceLength, part); int so=0, de=0; while (part>0) { if (source[so]==trenn||source[so]==0) { part--; if (part==0) { piece[de]=0; return piece; } else if (source[so]==0) { *piece=0; return piece; } else de=0; } else { piece[de]=source[so]; de++; } so++; } return piece; }
-
Und was ist jetzt so schwer daran, die Datentypen der Parameter zu vergleichen?
-
Manchmal da gibt es sie, die Tage wo man um sich herum nur Bäume sieht und dennoch den Wald sucht :p
-
Beim Prototyp:
`extern LPTSTR Piece(LPCTSTR source, LPTSTR piece, int part, TCHAR trenn, int iPieceLength=4096);
`
Implementierung:
`LPTSTR Piece(LPCTSTR source, LPTSTR piece, int part, TCHAR trenn, int iPieceLength)
{
...
`