关于MFC DLL的调用有关问题
关于MFC DLL的调用问题
我现在想调用的那个DLL,是用MFC的,只有.h和.dll文件,没有.lib(里面挺多函数的,这里列举一个LMC1_INITIAL(TCHAR *strEzcadPath,BOOL testMode,HWND EzcadHwnd)),现在我想用MFC应用程序(对话框的形式)去调用这个DLL里面的函数,因为那个目录下有许多DLL文件,我也不知道这个DLL连接了其他DLL没,所以我就将这个程序建立在该目录下,调用DLL是成功了,但就是调用不了里面的函数,LMC1_INITIAL lmc_initial=(LMC1_INITIAL)GetProcAddress(hInstance,"LMC1_INITIAL");每次对lmc_initial进行判断的都是返回null,请问这个是什么问题?我应该怎样解决?
------解决方案--------------------
GetLastError看看有没有错误信息
hInstance从何而来?
------解决方案--------------------
Johnson M. Hart书上的例子:
------解决方案--------------------
楼上两位的解答可以参考,每步调用API后,都可以GetLastError查看最后错误值是多少。
然后,Error Lookup这个程序可以查看错误值的描述;
Depends可以查看dll中依附的其他dll有没有找到。这两个程序都是VC的目录下能找到。
------解决方案--------------------
如果DLL输出的是C++函数,函数名会发生变化.
因为C++支持函数多态,你先一个函数名不同的参数都输出了,怎么找这些函数
一般是_function@参数字节数,你可以找个dll查看工具看下。
拜托多给点分,穷死了!
我现在想调用的那个DLL,是用MFC的,只有.h和.dll文件,没有.lib(里面挺多函数的,这里列举一个LMC1_INITIAL(TCHAR *strEzcadPath,BOOL testMode,HWND EzcadHwnd)),现在我想用MFC应用程序(对话框的形式)去调用这个DLL里面的函数,因为那个目录下有许多DLL文件,我也不知道这个DLL连接了其他DLL没,所以我就将这个程序建立在该目录下,调用DLL是成功了,但就是调用不了里面的函数,LMC1_INITIAL lmc_initial=(LMC1_INITIAL)GetProcAddress(hInstance,"LMC1_INITIAL");每次对lmc_initial进行判断的都是返回null,请问这个是什么问题?我应该怎样解决?
------解决方案--------------------
GetLastError看看有没有错误信息
hInstance从何而来?
------解决方案--------------------
Johnson M. Hart书上的例子:
int _tmain (int argc, LPTSTR argv[])
{
BOOL (__cdecl *cci_f) (LPCTSTR, LPCTSTR, DWORD);
HMODULE hDLL;
FARPROC pcci;
TCHAR YNResp[5] = YES;
if (argc < 5)
ReportError (_T("Usage: cciEL shift file1 file2 DllName"), 1, FALSE);
/* Load the cipher function. */
hDLL = LoadLibrary (argv[4]);
if (hDLL == NULL)
ReportError (_T("Failed loading DLL."), 4, TRUE);
/* Get the entry point address. */
pcci = GetProcAddress (hDLL, _T("cci_f"));//这里与你的不同
if (pcci == NULL)
ReportError (_T ("Failed of find entry point."), 5, TRUE);
cci_f = (BOOL (__cdecl *)(LPCTSTR, LPCTSTR, DWORD)) pcci;//这里与你的不同
/* Call the function. */
if (!cci_f (argv[2], argv[3], _ttoi(argv[1]) ) )//调试时,argv[2]文件要放在项目文件同一个目录
{
FreeLibrary (hDLL);
ReportError (_T ("cci failed."), 6, TRUE);
}
FreeLibrary (hDLL);
return 0;
}
------解决方案--------------------
楼上两位的解答可以参考,每步调用API后,都可以GetLastError查看最后错误值是多少。
然后,Error Lookup这个程序可以查看错误值的描述;
Depends可以查看dll中依附的其他dll有没有找到。这两个程序都是VC的目录下能找到。
------解决方案--------------------
如果DLL输出的是C++函数,函数名会发生变化.
因为C++支持函数多态,你先一个函数名不同的参数都输出了,怎么找这些函数
一般是_function@参数字节数,你可以找个dll查看工具看下。
拜托多给点分,穷死了!