错因:只记着写在这个头文件Dll_Md5_Test.h中写函数的声明
__declspec(dllexport) BOOL DLL_Test(IN LPTSTR lpFilePath,IN LPTSTR lpMd5Content);
,却忘记了
在含有
BOOL APIENTRY DllMain(HINSTANCE hInstance,DWORD fdwReason,PVOID pvReserved)
{
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
_tsetlocale(LC_CTYPE,TEXT(""));
LI_SetLogFilePathString(hInstance);
break;
case DLL_PROCESS_DETACH:
LI_FreeLogFilePathString();
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
这段代码的cpp文件中引用该头文件#include"Dll_Md5_Test.h".
另外,在引用该头文件的cpp文件中,必须含有被调用的函数的定义。
注意:如果被掉函数调用了其他函数,则头文件的顺序应该是Dll_Md5_Test.h文件在其他头文件的最上方,如:
#include <Windows.h>
#include <LOCALE.H>
#include <STDIO.H>
#include <IOSTREAM.H>
#include <TCHAR.H>
#include "InitialDisk_DLL.h"
#include "FormatDrive.h"
#include "SetPartitionName.h"
#include "InitialDisk.h"
一定要注意这一点,写成
#include "FormatDrive.h"
#include "SetPartitionName.h"
#include "InitialDisk.h"
#include "InitialDisk_DLL.h"
的话就不能产生lib文件。
对于我来说,这个错误隐藏的可真深,一开始,我还真没发现呢。然后就一点一点地对着尧哥的正确代码,想想他的运行机制,才慢慢发现这个严重的问题。