1. 程式人生 > >一個C++ 傳送郵件的類

一個C++ 傳送郵件的類

/*********************************************************************** 
*傳送郵件模組標頭檔案 
*可以傳送文字和附件(支援多個附件一起傳送) 
*************************************************************************/  
#pragma once  
struct SMailInfo //郵件資訊  
{  
//	char*   m_pcUserName;//使用者登入郵箱的名稱  
	char* m_pcUserName;
	char*   m_pcUserPassWord;//使用者登入郵箱的密碼  
	char*   m_pcSenderName;//使用者傳送時顯示的名稱  
	char*   m_pcSender;//傳送者的郵箱地址  
	char*   m_pcReceiver;//接收者的郵箱地址  
	char*   m_pcTitle;//郵箱標題  
	char*   m_pcBody;//郵件文字正文  
	char*   m_pcIPAddr;//伺服器的IP  
	char*   m_pcIPName;//伺服器的名稱(IP與名稱二選一,優先取名稱)  
	//SMailInfo(){memset(this,0,sizeof(SMailInfo));}  
};  
class CSendMailTool  
{  
public:  
	CSendMailTool(void);  
	~CSendMailTool(void);  

public:  
	bool SendMail(SMailInfo &smailInfo);//傳送郵件,需要在傳送的時候初始化郵件資訊  
	void AddFilePath(char * pcFilePath);//新增附件的決定路徑到附件列表中  
	void DeleteFilePath(char* pcFilePath);//刪除附件路徑,如果有的話  
	void DeleteAllPath(void);//刪除全部附件的路徑  

protected:  
	void GetFileName(char* fileName,char* filePath);//從附件的路徑中獲取檔名稱  
	void Char2Base64(unsigned char* pBuff64, unsigned char* pSrcBuff,int iLen);//把char型別轉換成Base64型別  
	bool  CReateSocket(SOCKET &sock);//建立socket連線  
	bool Logon(SOCKET &sock);//登入郵箱,主要進行發郵件前的準備工作  
	int GetFileData(char* FilePath);//由檔案路徑獲取附件內容  

	bool SendHead(SOCKET &sock);//傳送郵件頭  
	bool SendTextBody(SOCKET &sock);//傳送郵件文字正文  
	bool SendFileBody(SOCKET &sock);//傳送郵件附件  
	bool SendEnd(SOCKET &sock);//傳送郵件結尾  
protected:  
	CList<char*,char*> m_pcFilePathList;//記錄附件路徑  

	char  m_cSendBuff[4096];//傳送緩衝區  
	char  m_cReceiveBuff[1024];  
	char* m_pcFileBuff;//指向附件內容  
	SMailInfo m_sMailInfo;  
};  

原始檔

#include "StdAfx.h"
#include "SendMailTool.h"


/************************************************************************
* 傳送郵件模組
*可以傳送文字和附件(支援多個附件一起傳送)
*Date:2011-12-01
************************************************************************/
#include "StdAfx.h"
#include "SendMailTool.h"
#include "winsock2.h"
#pragma comment(lib,"WSOCK32")
#pragma comment(lib, "ws2_32")

CSendMailTool::CSendMailTool(void)
{
    m_pcFileBuff=NULL;
    memset(m_cSendBuff,0,sizeof(m_cSendBuff));
    memset(m_cReceiveBuff,0,sizeof(m_cReceiveBuff));
}


CSendMailTool::~CSendMailTool(void)
{
    DeleteAllPath();
}

void CSendMailTool::Char2Base64(unsigned char* dest, unsigned char* src, int srclen)
{
	int sign = 0;

	const unsigned char EncodeIndex[] = {
		'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
		'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
		'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
		'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'
	};

	for (int i = 0; i!= srclen; i++,src++,dest++)
	{
		switch(sign)
		{
		case 0:
			*(dest) = EncodeIndex[*src >> 2];
			break;
		case 1:
			*dest = EncodeIndex[((*(src-1)  & 0x03) << 4) | (((*src) & 0xF0) >> 4)];
			break;
		case 2:
			*dest = EncodeIndex[((*(src-1) &0x0F) << 2) | ((*(src) & 0xC0) >> 6)];
			*(++dest) = EncodeIndex[(*(src) &0x3F)];
			break;
		}
		(sign == 2)?(sign = 0):(sign++);
	}
	switch(sign)
	{
	case 0:
		break;
	case 1:
		*(dest++) = EncodeIndex[((*(src-1)  & 0x03) << 4) | (((*src) & 0xF0) >> 4)];
		*(dest++) = '=';
		*(dest++) = '=';
		break;
	case 2:
		*(dest++) = EncodeIndex[((*(src-1) &0x0F) << 2) | ((*(src) & 0xC0) >> 6)];
		*(dest++) = '=';
		break;
	default:
		break;
	}
}


void CSendMailTool::AddFilePath(char * pcFilePath)//新增附件路徑
{
    if(pcFilePath==NULL)
    {
        return;
    }
    int i;
    char* temp;
    for(i=0;i<m_pcFilePathList.GetCount();i++)
    {
        temp=m_pcFilePathList.GetAt(m_pcFilePathList.FindIndex(i));
        if(strcmp(pcFilePath,temp)==0)//如果已經存在就不用再添加了
        {
            return;
        }
    }
    m_pcFilePathList.AddTail(pcFilePath);
}

void CSendMailTool::DeleteFilePath(char* pcFilePath)//刪除附件路徑
{
    int i;
    char* temp;
    for(i=0;i<m_pcFilePathList.GetCount();i++)
    {
        temp=m_pcFilePathList.GetAt(m_pcFilePathList.FindIndex(i));
        if(strcmp(temp,pcFilePath)==0)//找到並刪除它,如果沒找到就算了
        {
            m_pcFilePathList.RemoveAt(m_pcFilePathList.FindIndex(i));
            delete[] temp;
            return;
        }
    }
}


void CSendMailTool::DeleteAllPath(void)
{
    m_pcFilePathList.RemoveAll();
}

int CSendMailTool::GetFileData(char* FilePath)
{
    m_pcFileBuff=NULL;
    if(FilePath==NULL)
    {
        return 0;
    }

    CFile f;
    int len;

    USES_CONVERSION;
    if(!f.Open(FilePath,CFile::modeRead|CFile::modeNoTruncate|CFile::typeBinary))
    {
        return 0;
    }
    len=(int)f.GetLength();
    m_pcFileBuff=new char[len+1];
    memset(m_pcFileBuff,0,len+1);
    f.Read(m_pcFileBuff,len);
    f.Close();

    return len;
}

/*
 * 從完整檔案路徑中,取檔名
 *
 * 修正當filePath只有檔名時,fileName沒取到
 */
void CSendMailTool::GetFileName(char* fileName,char* filePath)
{
    if(filePath==NULL || fileName==NULL)
    {
        return;
    }

	char * pName =strrchr(filePath,'\\');
	if(pName==NULL)//路徑中只有檔名
		pName=filePath;
	else
		pName++;

	strcpy(fileName, pName);
}

bool CSendMailTool::CReateSocket(SOCKET &sock)
{
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;
    wVersionRequested = MAKEWORD( 2, 2 );
    err = WSAStartup( wVersionRequested, &wsaData );
    if ( err != 0 )
    {
        return false;
    }
    if ( LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 )
    {
        WSACleanup( );
        return false;
    }
    sock = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
    if (sock == INVALID_SOCKET)
    {
        return false;
    }

    sockaddr_in servaddr;
    memset(&servaddr,0,sizeof(sockaddr_in));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(25);//發郵件一般都是25埠
    if(m_sMailInfo.m_pcIPName=="")
    {
        servaddr.sin_addr.s_addr = inet_addr(m_sMailInfo.m_pcIPAddr);//直接使用IP地址
    }
    else
    {
        struct hostent *hp=gethostbyname(m_sMailInfo.m_pcIPName);//使用名稱
		if (hp == NULL)
		{
			DWORD dwErrCode =	GetLastError();
			return false;
		}
        servaddr.sin_addr.s_addr=*(int*)(*hp->h_addr_list);
    }


    int ret = connect(sock,(sockaddr*)&servaddr,sizeof(servaddr));//建立連線
    if (ret == SOCKET_ERROR)
    {
		DWORD dwErr = GetLastError();
        return false;
    }

    return true;
}


bool CSendMailTool::Logon(SOCKET &sock)
{
	char local_host[MAX_PATH];

	if ( gethostname(local_host, MAX_PATH) != 0 )
	{
		return false;
	}
    recv(sock,m_cReceiveBuff,1024,0);
    memset(m_cSendBuff,0,sizeof(m_cSendBuff));
	sprintf_s(m_cSendBuff,"HELO %s\r\n", local_host);


    send(sock,m_cSendBuff,strlen(m_cSendBuff),0);//開始會話
    recv(sock,m_cReceiveBuff,1024,0);
    if(m_cReceiveBuff[0]!='2' || m_cReceiveBuff[1]!='5' || m_cReceiveBuff[2]!='0')
    {
        return false;
    }

    memset(m_cSendBuff,0,sizeof(m_cSendBuff));
    sprintf_s(m_cSendBuff,"AUTH LOGIN\r\n");
    send(sock,m_cSendBuff,strlen(m_cSendBuff),0);//請求登入
    recv(sock,m_cReceiveBuff,1024,0);
    if(m_cReceiveBuff[0]!='3' || m_cReceiveBuff[1]!='3' || m_cReceiveBuff[2]!='4')
    {
        return false;
    }

    memset(m_cSendBuff,0,sizeof(m_cSendBuff));
    Char2Base64((unsigned char*)m_cSendBuff,(unsigned char*)m_sMailInfo.m_pcUserName,strlen(m_sMailInfo.m_pcUserName));
    m_cSendBuff[strlen(m_cSendBuff)]='\r';
    m_cSendBuff[strlen(m_cSendBuff)]='\n';
    send(sock,m_cSendBuff,strlen(m_cSendBuff),0);//傳送使用者名稱
    recv(sock,m_cReceiveBuff,1024,0);
    if(m_cReceiveBuff[0]!='3' || m_cReceiveBuff[1]!='3' || m_cReceiveBuff[2]!='4')
    {
        return false;
    }

    memset(m_cSendBuff,0,sizeof(m_cSendBuff));
    Char2Base64((unsigned char*) m_cSendBuff,(unsigned char*) m_sMailInfo.m_pcUserPassWord,strlen(m_sMailInfo.m_pcUserPassWord));
    m_cSendBuff[strlen(m_cSendBuff)]='\r';
    m_cSendBuff[strlen(m_cSendBuff)]='\n';
    send(sock,m_cSendBuff,strlen(m_cSendBuff),0);//傳送使用者密碼
    recv(sock,m_cReceiveBuff,1024,0);
    if(m_cReceiveBuff[0]!='2' || m_cReceiveBuff[1]!='3' || m_cReceiveBuff[2]!='5')
    {
        return false;
    }
    return true;//登入成功
}


bool CSendMailTool::SendHead(SOCKET &sock)
{
    int rt;
    memset(m_cSendBuff,0,sizeof(m_cSendBuff));
    sprintf_s(m_cSendBuff,"MAIL FROM:<%s>\r\n",m_sMailInfo.m_pcSender);
    rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0);

    if(rt!=strlen(m_cSendBuff))
    {
        return false;
    }
    recv(sock,m_cReceiveBuff,1024,0);

    memset(m_cSendBuff,0,sizeof(m_cSendBuff));
    sprintf_s(m_cSendBuff,"RCPT TO:<%s>\r\n",m_sMailInfo.m_pcReceiver);
    rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0);
    if(rt!=strlen(m_cSendBuff))
    {
        return false;
    }
    recv(sock,m_cReceiveBuff,1024,0);

    memset(m_cSendBuff,0,sizeof(m_cSendBuff));
    memcpy(m_cSendBuff,"DATA\r\n",strlen("DATA\r\n"));
    rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0);
    if(rt!=strlen(m_cSendBuff))
    {
        return false;
    }
    recv(sock,m_cReceiveBuff,1024,0);

    memset(m_cSendBuff,0,sizeof(m_cSendBuff));
    sprintf_s(m_cSendBuff,"From:\"%s\"<%s>\r\n",m_sMailInfo.m_pcSenderName,m_sMailInfo.m_pcSender);
    sprintf_s(&m_cSendBuff[strlen(m_cSendBuff)],150,"To:\"INVT.COM.CN\"<%s>\r\n",m_sMailInfo.m_pcReceiver);
    sprintf_s(&m_cSendBuff[strlen(m_cSendBuff)],150,"Subject:%s\r\nMime-Version: 1.0\r\nContent-Type: multipart/mixed;   boundary=\"INVT\"\r\n\r\n",m_sMailInfo.m_pcTitle);
    rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0);
    if(rt!=strlen(m_cSendBuff))
    {
        return false;
    }

    return true;
}

bool CSendMailTool::SendTextBody(SOCKET &sock)
{
    int rt;
    memset(m_cSendBuff,0,sizeof(m_cSendBuff));
    sprintf_s(m_cSendBuff,"--INVT\r\nContent-Type: text/plain;\r\n  charset=\"gb2312\"\r\n\r\n%s\r\n\r\n",m_sMailInfo.m_pcBody);
    rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0);
    if(rt!=strlen(m_cSendBuff))
    {
        return false;
    }
    else
    {
        return true;
    }
}

bool CSendMailTool::SendFileBody(SOCKET &sock)
{
    int i;
    char* filePath;
    int rt;
    int len;
    int pt=0;
    char fileName[MAX_PATH];


    for(i=0;i<m_pcFilePathList.GetCount();i++)
    {
        pt=0;
        memset(fileName,0,MAX_PATH);
        filePath=m_pcFilePathList.GetAt(m_pcFilePathList.FindIndex(i));
        len=GetFileData(filePath);
        GetFileName(fileName,filePath);

        sprintf_s(m_cSendBuff,"--INVT\r\nContent-Type: application/octet-stream;\r\n  name=\"%s\"\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment;\r\n  filename=\"%s\"\r\n\r\n",fileName,fileName);
        send(sock,m_cSendBuff,strlen(m_cSendBuff),0);
        while (pt<len)
        {
            memset(m_cSendBuff,0,sizeof(m_cSendBuff));
            Char2Base64( (unsigned char*) m_cSendBuff,(unsigned char*) &m_pcFileBuff[pt],min(len-pt,3000));
            m_cSendBuff[strlen(m_cSendBuff)]='\r';
            m_cSendBuff[strlen(m_cSendBuff)]='\n';
			rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0);
            pt+=min(len-pt,3000);
            if(rt!=strlen(m_cSendBuff))
            {
                return false;
            }
        }
        if(len!=0)
        {
            delete [] m_pcFileBuff;
        }
    }

    return true;
}

bool CSendMailTool::SendEnd(SOCKET &sock)
{
    sprintf_s(m_cSendBuff,"--INVT--\r\n.\r\n");
    send(sock,m_cSendBuff,strlen(m_cSendBuff),0);

    sprintf_s(m_cSendBuff,"QUIT\r\n");
    send(sock,m_cSendBuff,strlen(m_cSendBuff),0);
    closesocket(sock);
    WSACleanup();
    return true;
}


bool CSendMailTool::SendMail(SMailInfo &smailInfo)
{
    memcpy(&m_sMailInfo,&smailInfo,sizeof(smailInfo));
    if(m_sMailInfo.m_pcBody==NULL
        || m_sMailInfo.m_pcIPAddr==NULL
        || m_sMailInfo.m_pcIPName==NULL
        || m_sMailInfo.m_pcReceiver==NULL
        || m_sMailInfo.m_pcSender==NULL
        || m_sMailInfo.m_pcSenderName==NULL
        || m_sMailInfo.m_pcTitle==NULL
        || m_sMailInfo.m_pcUserName==NULL
        || m_sMailInfo.m_pcUserPassWord==NULL)
    {
        return false;
    }
    SOCKET sock;
    if(!CReateSocket(sock))//建立連線
    {
        return false;
    }

    if(!Logon(sock))//登入郵箱
    {
        return false;
    }

    if(!SendHead(sock))//傳送郵件頭
    {
        return false;
    }

    if(!SendTextBody(sock))//傳送郵件文字部分
    {
        return false;
    }

    if(!SendFileBody(sock))//傳送附件
    {
        return false;
    }

    if(!SendEnd(sock))//結束郵件,並關閉sock
    {
        return false;
    }

    return true;
}
使用
void TestSendMail()
{
	CTime t = CTime::GetCurrentTime(); //獲取系統日期 

	int d=t.GetDay(); //獲得幾號 

	int y=t.GetYear(); //獲取年份 

	int m=t.GetMonth(); //獲取當前月份 

	int h=t.GetHour(); //獲取當前為幾時 

	int mm=t.GetMinute(); //獲取分鐘 

	int nowtime=m*1000000+d*10000+h*100+mm;
	char   str3[50]; 
	char str1[12]={0};
	itoa(nowtime,str1,10);
	
	char*   str2="【警告】伺服器出現清算錯誤_";  
     strcpy(str3,str2);  
	 strcat(str3,str1);    
	char*   str=(LPSTR)str3;


	SMailInfo mailInfo;

	//126 smtp
	mailInfo.m_pcUserName =             "
[email protected]
"; //"你的郵箱帳號"; mailInfo.m_pcUserPassWord = "ssssssssss"; // "密碼"; mailInfo.m_pcSenderName = "交易伺服器提示"; //傳送郵件者的名稱 mailInfo.m_pcSender = "[email protected]"; //傳送者的郵箱地址 mailInfo.m_pcReceiver = "[email protected]"; //接收者的郵箱地址 mailInfo.m_pcTitle = str; //郵箱標題 mailInfo.m_pcBody = "1234567979797979797979"; //郵件文字正文 mailInfo.m_pcIPAddr = ""; //伺服器的IP可以留空 mailInfo.m_pcIPName = "smtp.163.com" ; //伺服器的名稱(IP與名稱二選一,優先取名稱) CSendMail smtpMail; smtpMail.AddFilePath("cDisp.log"); //附件1 可給出完整的附件路徑 smtpMail.AddFilePath("TradeSrv.log"); //附件2 smtpMail.SendMail(mailInfo); } int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // 初始化 MFC 並在失敗時顯示錯誤 if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: 更改錯誤程式碼以符合您的需要 _tprintf(_T("錯誤: MFC 初始化失敗\n")); nRetCode = 1; } else { // TODO: 在此處為應用程式的行為編寫程式碼。 } TestSendMail(); return nRetCode; }



相關推薦

一個C++ 傳送郵件

/*********************************************************************** *傳送郵件模組標頭檔案 *可以傳送文字和附件(支援多個附件一起傳送) **************************

C#傳送郵件

public class Email { /// <summary> /// 傳送者 /// </summary> public string mailFrom { get; s

C#傳送郵件(附件)

本部落格主要利用C#中System.Net.Mail中的MailMessage 類進行郵件的傳送。話不多說直接上程式碼: using System; using System.Collections.Generic; using System.Conf

C# 傳送郵件(帶附加件傳送

有時候不太適合寫這些東西:不太會描述,因為在開發過程中遇到了,所以記錄一下,以便後面看看。 由於開發一直用的VS2015或者VS2017,所以不知道其他的版本開發情況,其實差不多 這是下面的核心程式碼:簡單的傳送郵件(不發附件):去掉新增附近的程式碼即可 string user = "***@163.

C# 傳送郵件功能實現

郵件傳送功能在OA以及一些網站驗證中很常用。下面是郵件傳送的一個函式,引數傳入收件人地址,郵件主題,郵件內容,讀者可根據自己的需求新增郵件的附件或者抄送人等。  /// <summary> /// 傳送郵件 /// </su

C# 傳送郵件內容嵌入圖片

我們在傳送郵件時,一般圖片都是用網路路徑,但有時如果接收方不可直接訪問外網,就不能看到圖片了,比如公司內部郵件,跟外界就沒法交流圖片。 那麼我們就來把圖片嵌入郵件中;檢視人就沒有限制了。 1。以linked的方式,此方式在郵件中不會出現圖片的附件   郵件內容呼

C#傳送郵件(新增附件)!

using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.T

使用.net(C#)傳送郵件(帶成功案例)

1.瞭解傳送郵件的三種方式  第一:client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;  //通過遠端SMTP伺服器傳送該郵件,這裡的network表示你要使用的遠端SMTP伺服器。  第

一些關於C#傳送郵件的程式碼

SmtpClient smtp = new SmtpClient(); smtp.EnableSsl = false; smtp.DeliveryMethod = SmtpDeliveryMethod.Network; smtp.Host = "smtp.163.com"; smtp.Credentials

C# 傳送郵件 附件名稱為空

// 1.建立郵件 MailMessage mailMsg = new MailMessage(); mailMsg.To.Add(new MailAddress("[email protected]")); // 2.設定郵件標題、正文等資訊 mailMsg.HeadersEnco

C++傳送郵件實現

首先,別忘了要設定傳送郵箱的smtp,例如,假設你需要用網易郵箱,你需要去你的163郵箱設定開啟smtp(有的郵箱還需要設定授權碼)。接著就可以用以下程式碼傳送郵件了: // SendMail.h #ifndef _SEND_MAIL_H_ #define

c#傳送郵件(帶抄送,密送,群發,附件)

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Mail; using System.Net.Mime; using System.Text; using

使用C#傳送郵件

最近有使用者提出了一個新的需求,希望公司的ERP系統在交易申請書被批准以後自動發郵件到相關人員的郵箱中,讓他們能第一時間知道。因為他們不想多打一次電話,也不願意每天都開著ERP,但是他們的Outlook能每5分鐘自動掃描一次新郵件跳出提醒。使用者的需求並不過分,所以我就接下來

【Java郵件開發】5.編寫一個JavaMail傳送郵件的程式

之前我們對JavaMail的API進行了簡單的介紹,並下載了相應的jar包。 這次,我們要著手使用JavaMail開發一個可以傳送郵件的程式。 1.建立工程 首先我們在Eclipse中新建一個名為JavaMailTest的工程: 然後我們新建一個lib資料夾,將mail

web開發 開發一個傳送郵件的應用

開發一個能傳送郵件的應用,前人種的樹,借鑑 參考大牛的程式碼,做的小應用。 大概是這樣的: 其中SMTP密碼,並非使用者名稱所對應的登入密碼,而是在開啟 163信箱這個服務時,自己設定的授權碼,按步驟即可輕鬆開啟這個服務,並獲得授權碼,其中,本次實驗的主要是163信箱,

c# STMP傳送郵件

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient { Host = "smtp.163.com",//使用163的SMTP伺服器傳送郵

c#幫助傳送郵件

1 private static string IsOpenSendMail = ConfigurationManager.AppSettings["IsOpenSendMail"]; //是否啟用異常訊息傳送郵箱功能 2 private static string

C#中使用MailMessage傳送郵件(QQ郵箱或者163郵箱)的小細節

一年前,我用程式碼操作QQ郵箱傳送郵件,直接失敗,但是QQ郵箱檢測到了我的這種行為,並且很友好的提示了一下,內容忘記了,意思記得,大概是您的QQ郵箱沒有開啟相關服務,不能進行...操作。 如上圖所示,就是這個沒有被勾選,那麼當時我設定選中後,儲存,就能用這個QQ郵箱進

一個c#的與web服務器交互的HttpClient

指示 all 斷點續傳 www. mod bytearray dex ron 發出 using System;using System.Collections.Generic;using System.IO;using System.Text;using System.Ne

C#調用C++導出一個實例

新建 分享圖片 img a* mys cte try namespace 失敗 一直認為帶導出類dll的只有VC自己可以調用,其它編程語言無法調用,今天看到一篇文章才知道自己錯了。https://blog.csdn.net/huiyouyongdeyu2011/articl