程序是2部分,一部分是DLL,另一部分是MFC写的界面,很简单的。
DLL用来处理一个目录下的所有txt文档。现在由于文档较多,需要在界面上显示程序正在处理哪一篇文档,防止死机了,没反应。
我目前的想法是:在DLL中写一个函数,将正在处理的文档名字传出来,但是如何在MFC中调用呢?
而且一般是界面函数调用DLL,如何将DLL中的函数触发界面改变呢?
请各位高手帮帮忙,提供一点思路。
DLL用来处理一个目录下的所有txt文档。现在由于文档较多,需要在界面上显示程序正在处理哪一篇文档,防止死机了,没反应。
我目前的想法是:在DLL中写一个函数,将正在处理的文档名字传出来,但是如何在MFC中调用呢?
而且一般是界面函数调用DLL,如何将DLL中的函数触发界面改变呢?
请各位高手帮帮忙,提供一点思路。
// EXE
void call( LPCTSTR lpszFileName )
{
MessageBox( lpszFileName );
}
// dll
typedef void *PFUNC( LPCTSTR );
PFUNC g_pfunc;
void SetCallBack( PFUNC p );
{
g_pfunc = p;
}
void DoWork( LPCTSTR lpszFileName )
{
g_pfunc( lpszFileName );
}
你的代码我不大懂。能不能再详细一点啊?
。。
fl = readdir(dir); // fl->d_name = "C3-Art0001.txt"
while ( fl != NULL )
{
if ( (strcmp(fl->d_name, ".")) && (strcmp(fl->d_name, "..")) )
{
处理文档
}
fl = readdir(dir);
}
closedir(dir);
}在上面这个while函数中我要添加一个回掉函数,把此时正在处理的txt文件名传出去。
在我的EXE界面上,
void CxxDlg::OnIndexButton()
{
// TODO: Add your control notification handler code here
DWORD dwStart1 = GetTickCount();
IndexFiles("f:\\testdata\\data","f:\\testdata\\index",false);//indexfile函数就是dll输出函数,这个函数触发了上面的函数。在上面函数的处理过程中,我要把文件名显示在界面上
DWORD dwEnd1 = GetTickCount();
UpdateData(false);
}
lpfnShow pCallbackFunc; //定义全局变量,指定你的EXE中的显示函数
void __declspec(dllexport) SetFuncPointer(lpfnShow lpShowFileName)
{
pCallbackFunc = lpShowFileName;
}在EXE程序中:
//typedef void (*lpfnShow)(char *pFileName);
typedef void (*pSetFuncPointer)(lpfnShow p);pSetFuncPointer pFunc = (pSetFuncPointer)GetProcAddress(hIns, "SetFuncPointer");
if( pFunc != NULL)
pFunc(ShowFileName);//ShowFileName为下面的函数的名称
// 显示文件名
void ShowFileName(char *pFileName)
{
...
}在你的上面的DLL中处理文件的地方调用:
pCallbackFunc (fl->d_name); //调用EXE中的ShowFileName(..)显示文件名
if ( (strcmp(fl->d_name, ".")) && (strcmp(fl->d_name, "..")) )
{
处理文档
}
我也是刚学,只知皮毛,不知行不行
在DLL中:
HWND hWnd; //定义一个全局变量,指向你的EXE程序窗口句柄,在EXE执行时传给DLL#define MY_MESSAGE WM_USER + 100
然后在你处理文件时调用:
::SendMessage(MY_MESSAGE, 0, (LPARAM)f1->d_name);//将你正在处理的文件名以消息的形式传给EXE
if ( (strcmp(fl->d_name, ".")) && (strcmp(fl->d_name, "..")) )
{
处理文档
}在EXE程序中:
在.h中加入
#define MY_MESSAGE WM_USER + 100
afx_msg void OnMymessage(WPARAM wParam, LPARAM lParam);然后在.cpp中添加函数
void OnMymessage(WPARAM wParam, LPARAM lParam)
{ CString strFileName = (TCHAR *)lParam;//假定fl->d_name是一个字符指针
... //显示strFileName }
在.cpp文件中加入消息映射
ON_MESSAGE(MY_MESSAGE, OnMymessage)
大概是这样
太感激了
我试试。