请问我这个程序怎么不能生成DLL啊

333sunshine 2005-05-29 07:00:10
// WoodSMTP.h: interface for the CWoodSMTP class.
//
//////////////////////////////////////////////////////////////////////


#if !defined(AFX_WOODSMTP_H__D9FEEB39_5D27_4FA4_8C55_1C5BABA9E47C__INCLUDED_)
#define AFX_WOODSMTP_H__D9FEEB39_5D27_4FA4_8C55_1C5BABA9E47C__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


#ifndef RESPONSE_LEN
#define RESPONSE_LEN 1024
#endif

#ifndef HEARD_LEN
#define HEARD_LEN 200
#endif

#ifndef MAIL_LEN
#define MAIL_LEN 2000
#endif

#ifndef TIME_OUT
#define TIME_OUT 2000
#endif

typedef struct MAILSERVER
{
char HOST[50];
char USER[50];
char PSW[50];
int socket;
}STRUCT_HOST;

const int BASE64_MAXLINE = 76;
const char EOL[] = "\r\n";
const char BASE64_TAB[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz0123456789+/";

class CWoodSMTP
{

public:
CWoodSMTP();
virtual ~CWoodSMTP();

BOOL ConnectHost(char *szHost,char *szUser,char *szPsw);
BOOL SendTXT(char *szFrom,char *szRcpt,char *szContent);
BOOL SendMail(char *szFrom,char **szRcpt,char *szSubject,char *szContent);

static int ANSIToBase64(const char *szInANSI, int nInLen, char *szOutBase64, int nOutLen);

public:
STRUCT_HOST *mail_host;
};

#endif // !defined(AFX_WOODSMTP_H__D9FEEB39_5D27_4FA4_8C55_1C5BABA9E47C__INCLUDED_)


// WoodSMTP.cpp: implementation of the CWoodSMTP class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "WoodSMTP.h"
#include <iostream.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////


CWoodSMTP::CWoodSMTP()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
mail_host = new STRUCT_HOST;
}

CWoodSMTP::~CWoodSMTP()
{
delete mail_host;
}

BOOL CWoodSMTP::ConnectHost(char *szHost,char *szUser,char *szPsw)
{
int SockFD;
struct sockaddr_in ServAddr;
char HEADER[HEARD_LEN]="";

LPHOSTENT pHost = gethostbyname(szHost);
SockFD = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
ServAddr.sin_family = AF_INET;
ServAddr.sin_addr.s_addr = *(ULONG *)pHost->h_addr_list[0];
ServAddr.sin_port = htons(25);//smtp 25


if(connect(SockFD, (struct sockaddr *)&ServAddr, sizeof(ServAddr))==SOCKET_ERROR)
{
return false;
}

strcat(HEADER,"HELO LOCALHOST");
strcat(HEADER,EOL);

strcat(HEADER,"AUTH LOGIN");
strcat(HEADER,EOL);


char Base64USER[100];
ANSIToBase64(szUser,strlen(szUser),Base64USER,0x555556);
strcat(HEADER,Base64USER);

char Base64PSW[100];
ANSIToBase64(szPsw,strlen(szPsw),Base64PSW,0x555556);
strcat(HEADER,Base64PSW);

if(send(SockFD,HEADER,strlen(HEADER),0)==SOCKET_ERROR)
{
return false;
}

Sleep(TIME_OUT);

char response_buf[RESPONSE_LEN];
int buf_len = recv(SockFD,response_buf,RESPONSE_LEN,0);
response_buf[buf_len] = '\0';

if(strstr(response_buf,"235")==NULL)
{
return false;
}

strcpy(mail_host->HOST,szHost);
strcpy(mail_host->USER,szUser);
strcpy(mail_host->PSW,szPsw);
mail_host->socket=SockFD;
return true;
}

BOOL CWoodSMTP::SendMail(char *szFrom,char **szRcpt,char *szSubject,char *szContent)
{
return 0;
}
BOOL CWoodSMTP::SendTXT(char *szFrom,char *szRcpt,char *szContent)
{
char TXT_MAIL[MAIL_LEN]="";

strcat(TXT_MAIL,"MAIL FROM: <");
strcat(TXT_MAIL,szFrom);
strcat(TXT_MAIL,">");
strcat(TXT_MAIL,EOL);
strcat(TXT_MAIL,"RCPT TO: <");
strcat(TXT_MAIL,szRcpt);
strcat(TXT_MAIL,">");
strcat(TXT_MAIL,EOL);

strcat(TXT_MAIL,"DATA");
strcat(TXT_MAIL,EOL);

strcat(TXT_MAIL,"X-WOODINF:");
strcat(TXT_MAIL,szContent);
strcat(TXT_MAIL,"X-WOODINF-END");

strcat(TXT_MAIL,EOL);
strcat(TXT_MAIL,".");
strcat(TXT_MAIL,EOL);

if(send(mail_host->socket,TXT_MAIL,strlen(TXT_MAIL),0)==SOCKET_ERROR)
{
return false;
}

Sleep(100);
char response_buf[RESPONSE_LEN];
int buf_len = recv(mail_host->socket,response_buf,RESPONSE_LEN,0);
response_buf[buf_len] = '\0';
//AfxMessageBox(response_buf);
if(strstr(response_buf,"250")==NULL)
{
return false;
}
return true;
}

int CWoodSMTP::ANSIToBase64(const char *szInANSI, int nInLen, char *szOutBase64, int nOutLen)
{
{
//Input Parameter validation
if ((szInANSI == NULL) || (nInLen == 0) || (szOutBase64 == NULL) || (nOutLen == 0))
return 0;
if (nOutLen < (nInLen*4/3 + 1 + nInLen*4/3/BASE64_MAXLINE*2 + 1 + 4))
return 0;

//Set up the parameters prior to the main encoding loop
int nInPos = 0;
int nOutPos = 0;
int nLineLen = 0;
int c1, c2, c3;
int i;

// Get three characters at a time from the input buffer and encode them
for (i=0; i<nInLen/3; ++i)
{
//Get the next 2 characters
c1 = szInANSI[nInPos++] & 0xFF;
c2 = szInANSI[nInPos++] & 0xFF;
c3 = szInANSI[nInPos++] & 0xFF;

//Encode into the 4 6 bit characters
szOutBase64[nOutPos++] = BASE64_TAB[c1 >> 2];
szOutBase64[nOutPos++] = BASE64_TAB[((c1 << 4) | (c2 >> 4)) & 0x3F];
szOutBase64[nOutPos++] = BASE64_TAB[((c2 << 2) | (c3 >> 6)) & 0x3F];
szOutBase64[nOutPos++] = BASE64_TAB[c3 & 0x3F];
nLineLen += 4;

//Handle the case where we have gone over the max line boundary
if (nLineLen > BASE64_MAXLINE - 4)
{
szOutBase64[nOutPos++] = EOL[0];
szOutBase64[nOutPos++] = EOL[1];
nLineLen = 0;
}
}

// Encode the remaining one or two characters in the input buffer
switch (nInLen % 3)
{
case 0:
{
szOutBase64[nOutPos++] = EOL[0];
szOutBase64[nOutPos++] = EOL[1];
break;
}
case 1:
{
c1 = szInANSI[nInPos] & 0xFF;
szOutBase64[nOutPos++] = BASE64_TAB[(c1 & 0xFC) >> 2];
szOutBase64[nOutPos++] = BASE64_TAB[((c1 & 0x03) << 4)];
szOutBase64[nOutPos++] = '=';
szOutBase64[nOutPos++] = '=';
szOutBase64[nOutPos++] = EOL[0];
szOutBase64[nOutPos++] = EOL[1];
break;
}
case 2:
{
c1 = szInANSI[nInPos++] & 0xFF;
c2 = szInANSI[nInPos] & 0xFF;
szOutBase64[nOutPos++] = BASE64_TAB[(c1 & 0xFC) >> 2];
szOutBase64[nOutPos++] = BASE64_TAB[((c1 & 0x03) << 4) | ((c2 & 0xF0) >> 4)];
szOutBase64[nOutPos++] = BASE64_TAB[((c2 & 0x0F) << 2)];
szOutBase64[nOutPos++] = '=';
szOutBase64[nOutPos++] = EOL[0];
szOutBase64[nOutPos++] = EOL[1];
break;
}
default:
{
return 0;
}
}

szOutBase64[nOutPos] = 0;

return nOutPos;
}
}


...全文
78 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qrlvls 2005-05-31
  • 打赏
  • 举报
回复
Debug版本重载了new操作符,你试试用Release版本进行编译
333sunshine 2005-05-31
  • 打赏
  • 举报
回复
来人帮帮忙吧!
333sunshine 2005-05-29
  • 打赏
  • 举报
回复
我把 mail_host = new STRUCT_HOST; 这句话注释掉就没有错误了.
能告诉我为什么吗?
333sunshine 2005-05-29
  • 打赏
  • 举报
回复
我把 #include <afxsock.h> 这个加了.
这个#pragma comment(lib, "ws2_32.lib") 加在了WoodSMTP.cpp里面



现在还有2个错:
--------------------Configuration: Smtp_dll - Win32 Debug--------------------
Compiling...
WoodSMTP.cpp
Linking...
WoodSMTP.obj : error LNK2001: unresolved external symbol "void * __cdecl operator new(unsigned int,char const *,int)" (??2@YAPAXIPBDH@Z)
Debug/Smtp_dll.dll : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Creating browse info file...

Smtp_dll.dll - 2 error(s), 0 warning(s)
greenteanet 2005-05-29
  • 打赏
  • 举报
回复
加上#pragma comment(lib, "你的lib名字.lib")
qrlvls 2005-05-29
  • 打赏
  • 举报
回复
如果还不行,再加上
#pragma comment(lib, "ws2_32.lib")
从你的错误信息来看,是因为找不到WinSock相关的函数定义
qrlvls 2005-05-29
  • 打赏
  • 举报
回复
在 stdafx.h 中
#include <afxsock.h>
333sunshine 2005-05-29
  • 打赏
  • 举报
回复
报错为:

Compiling...
WoodSMTP.cpp
Linking...
WoodSMTP.obj : error LNK2001: unresolved external symbol "void * __cdecl operator new(unsigned int,char const *,int)" (??2@YAPAXIPBDH@Z)
WoodSMTP.obj : error LNK2001: unresolved external symbol _WSAStartup@8
WoodSMTP.obj : error LNK2001: unresolved external symbol _recv@16
WoodSMTP.obj : error LNK2001: unresolved external symbol _send@16
WoodSMTP.obj : error LNK2001: unresolved external symbol _connect@12
WoodSMTP.obj : error LNK2001: unresolved external symbol _htons@4
WoodSMTP.obj : error LNK2001: unresolved external symbol _socket@12
WoodSMTP.obj : error LNK2001: unresolved external symbol _gethostbyname@4
Debug/Smtp_dll.dll : fatal error LNK1120: 8 unresolved externals
Error executing link.exe.
Creating browse info file...

Smtp_dll.dll - 9 error(s), 0 warning(s)


这个编译可以通过, 但是就是不能生存DLL.
我还是个VC菜鸟, 请大家帮帮忙

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧