afxdb.h错误? 我在C++中编写了一个连接数据库的*DLL。我尝试在控制台应用程序中使用afxdb.h,效果很好。现在,我想在我的*dll中使用相同的代码。因此,我将afxdb.h添加到stdafx.h中,当我编译时发现了这个错误 mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in JunkDLL.obj mfcs42d.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in JunkDLL.obj; second definition ignored Creating library Debug/JunkDLL.lib and object Debug/JunkDLL.exp Debug/JunkDLL.dll : fatal error LNK1169: one or more multiply defined symbols found

afxdb.h错误? 我在C++中编写了一个连接数据库的*DLL。我尝试在控制台应用程序中使用afxdb.h,效果很好。现在,我想在我的*dll中使用相同的代码。因此,我将afxdb.h添加到stdafx.h中,当我编译时发现了这个错误 mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in JunkDLL.obj mfcs42d.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in JunkDLL.obj; second definition ignored Creating library Debug/JunkDLL.lib and object Debug/JunkDLL.exp Debug/JunkDLL.dll : fatal error LNK1169: one or more multiply defined symbols found,c++,visual-c++,mfc,odbc,C++,Visual C++,Mfc,Odbc,我的stdafx.h看起来像 #if !defined(AFX_STDAFX_H__123__INCLUDED_) #define AFX_STDAFX_H__123__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "afxwin.h" #include "afxext.h" #include "afxdb.h" // Insert your headers here #d

我的stdafx.h看起来像

#if !defined(AFX_STDAFX_H__123__INCLUDED_)
#define AFX_STDAFX_H__123__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "afxwin.h"
#include "afxext.h"
#include "afxdb.h"
// Insert your headers here
#define WIN32_LEAN_AND_MEAN// Exclude rarely-used stuff from Windows headers
#include "windows.h"
// TODO: reference additional headers your program requires here
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the  previous line.
#endif // !defined(AFX_STDAFX_H__123__INCLUDED_)
谢谢您的帮助。

您的DLL已关闭。在这种情况下,MFC提供自己的
DllMain()
入口点,而您的DLL不应提供入口点

您可以在派生单例的
InitInstance()
方法中执行初始化,或者。

您的DLL正在运行。在这种情况下,MFC提供自己的
DllMain()
入口点,而您的DLL不应提供入口点


您可以在派生单例的
InitInstance()
方法中执行初始化,或者。

因此我从junkdell.cpp中注释掉了BOOL-apitery-DllMain(…),并且编译时没有任何错误。这样做对吗?我是新的C++(VC 6)。如果你的代码> DLLMIN()//C>不负责任何初始化或终止操作(即如果它是空的),那么这是正确的事情。(作为个人偏好,我建议删除该函数而不是注释掉它,因为注释中的死代码会导致噪音,使您的模块更难理解和维护。)*.dll旨在成为多线程访问的数据访问层。我不确定在这种情况下是否需要DLLMain()。这取决于您的代码。如果最终需要全局初始化或终止,则必须遵循
CWinApp
路线。到目前为止,您的
DllMain()
是否真的在做什么?(如果是,你能把代码添加到你的问题中吗?)。这样做对吗?我是新的C++(VC 6)。如果你的代码> DLLMIN()//C>不负责任何初始化或终止操作(即如果它是空的),那么这是正确的事情。(作为个人偏好,我建议删除该函数而不是注释掉它,因为注释中的死代码会导致噪音,使您的模块更难理解和维护。)*.dll旨在成为多线程访问的数据访问层。我不确定在这种情况下是否需要DLLMain()。这取决于您的代码。如果最终需要全局初始化或终止,则必须遵循
CWinApp
路线。到目前为止,您的
DllMain()
是否真的在做什么?(如果是,你能在你的问题中添加代码吗?)