Error信息如下: fatal error C1010: 在查找预编译头指令时遇到意外的文件结尾
源码在此:
/**************************mssql.cpp********************/
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include "db_mssql.h"
#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")_ConnectPtr g_conn("ADODB.Connection");
BOOL bInited;//初始化函数
BOOL Init(){
// 初始化OLE/COM库环境 ,为访问ADO接口做准备
   ::CoInitialize(NULL); 
return true;
}
//转换成16进制?不知道干嘛的,复制过来先.
char* ToHexString(char* dst, const unsigned char* data, size_t size)
{
char pBuf[4];
    size_t i;    if (!dst) return NULL; memset( dst, 0, sizeof( char ) * (size * 2 + 1) );
for(i=0; i<size; i++ )
{
memset( pBuf, 0, sizeof( char ) * 4 );
sprintf( pBuf, "%02x", (unsigned char)data[i] );
strcat(dst, pBuf);
}
return dst;
}//dll 入口函数
BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
 
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
bInited = Init();
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
    return TRUE;
}/*******************************
第一个输出的函数db_connect()
*********************************/
DLL_EXPORT_API BOOL CALL_TYPE db_connect(LPSTR conn_str)
{
// 创建Connection对象
  g_conn.CreateInstance("ADODB.Connection");
  _bstr_t strConnect=(_bstr_t)Conn_str ;
  g_conn->Open(strConnect,"","",adModeUnknown);
  if(m_pConnection==NULL)return false;
else
  return true;
}/*******************************
第二个输出的函数db_update()
*********************************/
DLL_EXPORT_API BOOL CALL_TYPE db_update(const unsigned char* info_hash, int completed_num, int peer_num, int seeder_num)
{
char hash_string[64];
////////这段东西可能有用的吧?
if ((info_hash == NULL) || (completed_num < 0) || (peer_num < 0) || (seeder_num < 0) )
{
return FALSE;
}
    if (!bInited) return FALSE;
    ToHexString(hash_string, info_hash, 20);
///////

char sql[512];
char sqlf_select[] = "SELECT InfoHash FROM TrackerStatus WHERE InfoHash='%s'";
char sqlf_insert[] = "INSERT INTO TrackerStatus (InfoHash, CompletedNum, PeerNum, SeederNum) VALUES ('%s', %d, %d, %d)";
char sqlf_update[] = "UPDATE TrackerStatus SET CompletedNum=CompletedNum+%d, PeerNum=%d, SeederNum=%d WHERE InfoHash='%s'";
_variant_t RecordsAffected;
  sprintf(sql, sqlf_select, hash_string);
    g_conn->Execute(sql,&RecordsAffected,adCmdText); 
    if (RecordsAffected > 0) {
     sprintf(sql, sqlf_update, completed_num, peer_num, seeder_num, hash_string);
    }else {
     sprintf(sql, sqlf_insert, hash_string, completed_num, peer_num, seeder_num);
    }
    
g_conn->Execute(sql,&RecordsAffected,adCmdText);
    if ( RecordsAffected != 0) {
return FALSE;
    }
    
    return TRUE;
}/*******************************
第三个输出的函数db_disconnect()
*********************************/
DLL_EXPORT_API BOOL CALL_TYPE db_disconnect()
{
if (g_conn->State) {
    g_conn->Close();
g_conn= NULL;
   
}
    return TRUE;
}/*********************************头文档**************************/
#define DLL_EXPORT_API __declspec(dllexport)
#define CALL_TYPE __fastcall
extern "C" 
{DLL_EXPORT_API BOOL CALL_TYPE db_connect(LPSTR);
DLL_EXPORT_API BOOL CALL_TYPE db_update(const unsigned char* , int, int, int);
DLL_EXPORT_API BOOL CALL_TYPE db_disconnect();}
/*****************************mssql.def***************************/
LIBRARY db_mssql
EXPORTS
db_connect
db_disconnect
db_update
//问题2:顺便问一下,为什么我debug结果不是dll而是obj?
//问题3:def是舍?
//初学C++,第一次做DLL希望给点帮助.谢谢各位.

解决方案 »

  1.   

    1 应该是头文件的错误。
    2 生成基本的mfc文件后,
      编译(正确)->逐个添加头文件,编译(是否正确)->添加功能函数(是否正确)->
      采取一步步的添加编译的方法,排除错误。
    3 def 是一个类似说明的文件,编译生成dll后,别人知道你导出的是这几个函数。
      

  2.   

    1,预编头文件 #include "stdafx.h"
    2,正确编译,连接就生成了
    3,def文件指明导出函数名
      

  3.   

    应该是预编译的问题,你用的是vc吗?如果是g++,每个文件最后加个回车没准就解决了,呵呵