954,193 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

What is it meaned [Linker error] undefined reference to `MAPILogon@24'

C++ Code:

/* readmail.c */ 
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <windowsx.h>
#include <mapi.h>
#include <string.h>
int readmail();
long err;
LHANDLE lhSession;
lpMapiMessage FAR *lppMessage;
lpMapiMessage lpMessage;
char szSeedMessageID[512];
char szMessageID[512];
char szTmp[4096];
char szTmp2[50];
LPSTR lpszSeedMessageID=&szSeedMessageID[0];
LPSTR lpszMessageID=&szMessageID[0];
int main()
{
readmail();
return(0);
}
 
int readmail()
{
 
/************ Logon **********************/ 
err = MAPILogon(0L, "", "", MAPI_LOGON_UI, 0L,
&lhSession);
if(err != SUCCESS_SUCCESS)
{
MessageBox(0, "Error logging on", "Error", MB_OK);
return(0);
}
/********* Find Messages ********************/ 
*lpszSeedMessageID = '\0';
// reset MAPIFindNext back to the top again
err = MAPIFindNext(lhSession, 0L, "IPM.Microsoft Mail.Note",
lpszSeedMessageID, 0L, 0L, lpszMessageID);
if(err != SUCCESS_SUCCESS)
{
MessageBox(0, "Error finding first message", "Error",
MB_OK);
err = MAPILogoff(lhSession, 0L, 0L, 0L);
return(0);
 
}
do
{
lppMessage=(lpMapiMessage FAR *) &lpMessage;
/******** Read Message *************/ 
err = MAPIReadMail(lhSession, 0L, lpszMessageID,
MAPI_PEEK, 0L, lppMessage);
if(err != SUCCESS_SUCCESS)
{
MessageBox(0, "Error during message read", "Error",
MB_OK);
err = MAPILogoff(lhSession, 0L, 0L, 0L);
return(0);
}
/******* copy Subject and NoteText into string *************/ 
if((lpMessage->lpszSubject) != NULL){
_fstrcpy(szTmp2, lpMessage->lpszSubject); // Check for NULL strings
}
else _fstrcpy(szTmp2,"No subject text");
if((lpMessage->lpszNoteText) != NULL){
if(_fstrlen(lpMessage->lpszNoteText)>4096){ // Check for large message body
MessageBox(0, "Message body to large", "MAPI2.C", MB_OK);
}
_fstrcpy(szTmp, lpMessage->lpszNoteText);
}
else _fstrcpy(szTmp, "No message body");
printf("\nSUBJECT: %s\n", szTmp2);
printf("\nNOTETEXT: \n%s\n", szTmp);
/****** free memory used by MAPI *********************/ 
err = MAPIFreeBuffer(lpMessage);
if(err != SUCCESS_SUCCESS)
{
MessageBox(0, "Error freeing memory", "Error",MB_OK);
}
//get next message ID.
lstrcpy(lpszSeedMessageID, lpszMessageID);
err = MAPIFindNext(lhSession, 0L, "IPM.Microsoft Mail.Note",
lpszSeedMessageID, 0L, 0L, lpszMessageID);
if(err != SUCCESS_SUCCESS)
{
MessageBox(0, "No more messages", "Warning",
MB_OK);
err = MAPILogoff(lhSession, 0L, 0L, 0L);
return(0);
}
lppMessage=(lpMapiMessage FAR *) &lpMessage;
 
}while(err == SUCCESS_SUCCESS);
 
/************** Logoff ***************/ 
err = MAPILogoff(lhSession, 0L, 0L, 0L);
return(0);
}











//====================================================================
Error in Dev C++ compile

[Linker error] undefined reference to `MAPILogon@24'
[Linker error] undefined reference to `MAPIFindNext@28'
[Linker error] undefined reference to `MAPILogoff@16'
[Linker error] undefined reference to `MAPIReadMail@24'
[Linker error] undefined reference to `MAPILogoff@16'
[Linker error] undefined reference to `MAPIFreeBuffer@4'
[Linker error] undefined reference to `MAPIFindNext@28'
[Linker error] undefined reference to `MAPILogoff@16'
[Linker error] undefined reference to `MAPILogoff@16'
ld returned 1 exit status
C:\Dev-Cpp\project4\Makefile.win [Build Error] [Project4.exe] Error 1

Why? and Whatis MAPILogon@24 mean & @16 % @28 ?

jacove
Newbie Poster
1 post since Aug 2006
Reputation Points: 10
Solved Threads: 0
 

That means you are not linking the libraries with the object code for those functions. RTFM and find the required library.

WolfPack
Postaholic
Moderator
2,051 posts since Jun 2005
Reputation Points: 572
Solved Threads: 115
 

Unlike most win32 api functions mapi does not have a library. Instead, you will have to learn how to use LoadLibrary() and GetProcAddress(), as explained in MSDN
To use the Simple MAPI functions, compile your source code with MAPI.H.
MAPI.H contains definitions for all of the functions, return value constants,
and data types. To call a Simple MAPI function, load MAPI.DLL and use the
Win32 GetProcAddress function to acquire an entry point. The function
calling conventions should be FAR PASCAL.

Ancient Dragon
Retired & Loving It
Team Colleague
30,046 posts since Aug 2005
Reputation Points: 5,662
Solved Threads: 2,342
 

It used to happen to me lot of times,

I use Dev C++,

The problem is that you have included the header file that contains this function , but forgot to include the .lib or .a files with your files.

Suppose you want to use winsock with your app,

#include
#include

run_some_function_in_winsock();

but then you forget to include winsock.lib , it won't work because that function is defined in winsock.h , and is present in the winsock32.dll , and winsock.lib tells your compiler to link that function with your function call in your app.

ishwar
Newbie Poster
24 posts since Jul 2006
Reputation Points: 8
Solved Threads: 0
 
It used to happen to me lot of times, The problem is that you have included the header file that contains this function , but forgot to include the .lib or .a files with your files.

I guess you didn't bother to read any of the other posts. If you had, you would have found out that there is no library for the functions he is calling.

Ancient Dragon
Retired & Loving It
Team Colleague
30,046 posts since Aug 2005
Reputation Points: 5,662
Solved Threads: 2,342
 
I guess you didn't bother to read any of the other posts. If you had, you would have found out that there is no library for the functions he is calling.


ummm , I seem to have it.mapi32.lib ??

Anyways , you may download the zip file I have included,

It should work, It was in my Dev C++ lib folder,

Ishwar

Attachments mapi32.zip (6.61KB)
ishwar
Newbie Poster
24 posts since Jul 2006
Reputation Points: 8
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You