请问一下关于制作DLL的一个有关问题

请教一下关于制作DLL的一个问题
本帖最后由 ilearn 于 2015-01-08 14:21:29 编辑
我想问下制作dll时,请大神帮我看看什么问题,我GOOGLE过,答案说可能是#define去掉了,这个是不是去掉了#define的问题呀?怎么办?
#define有些书讲相当于 const ,而const 相当于一个值保存在变量里不改变,比如我这段代码
我去掉了一段
/*
#define FROM "my@domain.com"
#define TO "someuser@domain.com"
//#define CC "otheruser@domain.com"
//#define BCC "otheruser@domain.com"
#define SMTPSERVER "smtp.mydomain.com"
#define SMTPPORT 25
#define SMTPUSER NULL
#define SMTPPASS NULL 
以上就是我去掉的
*/

#include "quickmail.h"
#include <stdio.h> 
#include "mymail3.h"

#pragma comment(lib, "libquickmail.a")


int   __stdcall sendmyemail(const char* emailservername,const char* senduser ,const char *thepass,const char* myemailaddr,const char* toname,const char* emailsendaddr,const char* thetitle,const  char* thebody,const char* attachaddr )
{

unsigned int SMTPPORT=25;

int returncode;
returncode=0;

quickmail_initialize();
quickmail mailobj = quickmail_create(myemailaddr, thetitle);

quickmail_add_to(mailobj, emailsendaddr);


quickmail_add_header(mailobj, "Importance: Low");
quickmail_add_header(mailobj, "X-Priority: 5");
quickmail_add_header(mailobj, "X-MSMail-Priority: Low");
quickmail_set_body(mailobj, thebody);

quickmail_add_body_memory(mailobj, "text/html", "This is a <b>test</b> e-mail.<br/>\nThis mail was sent using <u>libquickmail</u>.", 80, 0);

quickmail_add_attachment_file(mailobj, attachaddr, NULL);

quickmail_add_attachment_memory(mailobj, "test.log", NULL, "Test\n123", 8, 0);

const char* errmsg;
quickmail_set_debug_log(mailobj, stderr);
if ((errmsg = quickmail_send(mailobj, emailservername, SMTPPORT, senduser, thepass)) != NULL)
returncode=-1;
quickmail_destroy(mailobj);
if (returncode==0)
return 0; 
else
return -1;
}




1>mymail3.obj : error LNK2019: 无法解析的外部符号 __imp__quickmail_destroy,该符号在函数 _sendmyemail@36 中被引用
1>mymail3.obj : error LNK2019: 无法解析的外部符号 __imp__quickmail_send,该符号在函数 _sendmyemail@36 中被引用
1>mymail3.obj : error LNK2019: 无法解析的外部符号 __imp__quickmail_set_debug_log,该符号在函数 _sendmyemail@36 中被引用
1>mymail3.obj : error LNK2019: 无法解析的外部符号 __imp__quickmail_add_attachment_memory,该符号在函数 _sendmyemail@36 中被引用
1>mymail3.obj : error LNK2019: 无法解析的外部符号 __imp__quickmail_add_attachment_file,该符号在函数 _sendmyemail@36 中被引用
1>mymail3.obj : error LNK2019: 无法解析的外部符号 __imp__quickmail_add_body_memory,该符号在函数 _sendmyemail@36 中被引用
1>mymail3.obj : error LNK2019: 无法解析的外部符号 __imp__quickmail_set_body,该符号在函数 _sendmyemail@36 中被引用
1>mymail3.obj : error LNK2019: 无法解析的外部符号 __imp__quickmail_add_header,该符号在函数 _sendmyemail@36 中被引用
1>mymail3.obj : error LNK2019: 无法解析的外部符号 __imp__quickmail_add_to,该符号在函数 _sendmyemail@36 中被引用
1>mymail3.obj : error LNK2019: 无法解析的外部符号 __imp__quickmail_create,该符号在函数 _sendmyemail@36 中被引用
1>mymail3.obj : error LNK2019: 无法解析的外部符号 __imp__quickmail_initialize,该符号在函数 _sendmyemail@36 中被引用
1>E:\cpptestnew\mailiberary\mymail3\Debug\mymail3.dll : fatal error LNK1120: 11 个无法解析的外部命令


下面是原例子
#include "quickmail.h"
#include <stdio.h>
#define FROM "my@domain.com"
#define TO "someuser@domain.com"
//#define CC "otheruser@domain.com"
//#define BCC "otheruser@domain.com"
#define SMTPSERVER "smtp.mydomain.com"
#define SMTPPORT 25
#define SMTPUSER NULL
#define SMTPPASS NULL
void list_attachment_callback (quickmail mailobj, const char* filename, quickmail_attachment_open_fn email_info_attachment_open, quickmail_attachment_read_fn email_info_attachment_read, quickmail_attachment_close_fn email_info_attachment_close, void* callbackdata)
{
printf("[%i]: %s\n", ++*(int*)callbackdata, filename);
}
int main ()
{
printf("libquickmail %s\n", quickmail_get_version());
quickmail_initialize();
quickmail mailobj = quickmail_create(FROM, "libquickmail test e-mail");
#ifdef TO
quickmail_add_to(mailobj, TO);
#endif
#ifdef CC
quickmail_add_cc(mailobj, CC);
#endif
#ifdef BCC
quickmail_add_bcc(mailobj, BCC);
#endif
quickmail_add_header(mailobj, "Importance: Low");
quickmail_add_header(mailobj, "X-Priority: 5");
quickmail_add_header(mailobj, "X-MSMail-Priority: Low");
quickmail_set_body(mailobj, "This is a test e-mail.\nThis mail was sent using libquickmail.");
//quickmail_add_body_memory(mailobj, NULL, "This is a test e-mail.\nThis mail was sent using libquickmail.", 64, 0);
quickmail_add_body_memory(mailobj, "text/html", "This is a <b>test</b> e-mail.<br/>\nThis mail was sent using <u>libquickmail</u>.", 80, 0);
/**/
quickmail_add_attachment_file(mailobj, "test_quickmail.c", NULL);
quickmail_add_attachment_file(mailobj, "test_quickmail.cbp", NULL);
quickmail_add_attachment_memory(mailobj, "test.log", NULL, "Test\n123", 8, 0);
/**/
/*/
quickmail_fsave(mailobj, stdout);
int i;
i = 0;
quickmail_list_attachments(mailobj, list_attachment_callback, &i);
quickmail_remove_attachment(mailobj, "test_quickmail.cbp");
i = 0;
quickmail_list_attachments(mailobj, list_attachment_callback, &i);
quickmail_destroy(mailobj);
return 0;
/**/
const char* errmsg;
quickmail_set_debug_log(mailobj, stderr);
if ((errmsg = quickmail_send(mailobj, SMTPSERVER, SMTPPORT, SMTPUSER, SMTPPASS)) != NULL)
fprintf(stderr, "Error sending e-mail: %s\n", errmsg);
quickmail_destroy(mailobj);
return 0;

------解决思路----------------------
你使用的这些quickmail_destroy函数实现的cpp文件要包含到工程,或者link相关的lib文件
------解决思路----------------------
quickmail系列的函数,要么有动态库,要么有lib,要么有cpp/h,有哪个就加进去哪个吧
------解决思路----------------------
引用:
在 项目--属性里 链接器已经 把静态库所在的文件夹加了进去了,而且程序开始时#pragma comment(lib, "libquickmail.a")


libquickmail.a  。。。。这尼玛确定是windows库吗?看风格不像啊,linux下的库倒是libxxxx.a形式的名字。确认下吧
------解决思路----------------------
引用:
quickmail系列的函数,要么有动态库,要么有lib,要么有cpp/h,有哪个就加进去哪个吧

正解,和你说的#define没有关系。
这种链接错误显然是找不到函数实现