to easypower: 这样加载一个MFCDLL.dll(实现弹出一对话框)为何fail啊?
这样加载一个MFCDLL.dll(实现弹出一对话框)为何fail啊?在响应函数中添加如下代码:(还将MFCDLL.dll拷贝到debug目录下)
typedef void (WINAPI * TESTDLL)();
HINSTANCE hmod;
hmod = ::LoadLibrary ("MFCDLL.dll");
if(hmod==NULL)
{
AfxMessageBox("Fail");
}
TESTDLL lpproc;
lpproc = (TESTDLL)GetProcAddress (hmod,"Show");
if(lpproc!=(TESTDLL)NULL)
(*lpproc)();
FreeLibrary(hmod);
MFCDLL.dll中的响应函数如下所示:
extern "C" __declspec(dllexport) void Show()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CTest test;
test.DoModal ();
}
在纯vc的exe文件中能成功调用MFCDLL.dll,为何到arx中不行了呢????(疑惑.......)
程序代码照着下面的网址上的讲解添加的
http://www.vckbase.com/document/viewdoc.asp?id=543 你没有设置当前的运行环境的:
你现在用下面的代码试一试
]:
TESTDLL lpproc;
//得到资源的HANDLE
::afxSetResourcehandle(hmod);
lpproc = (TESTDLL)GetProcAddress (hmod,"Show");
//返回CAD的HANDLE
afxSetResourcehandle(acedGetAcadResourceInstance());
if(lpproc!=(TESTDLL)NULL)
(*lpproc)();
FreeLibrary(hmod); typedef void (WINAPI * TESTDLL)();
HINSTANCE hmod;
hmod = ::LoadLibrary ("MFCDLL.dll");
if(hmod==NULL)
{
AfxMessageBox("Fail");
}
TESTDLL lpproc;
//得到资源的HANDLE
::AfxSetResourceHandle(hmod);
lpproc = (TESTDLL)GetProcAddress (hmod,"Show");
//返回CAD的HANDLE
AfxSetResourceHandle(acedGetAcadResourceInstance());
if(lpproc!=(TESTDLL)NULL)
(*lpproc)();
FreeLibrary(hmod);
是这样吗?
为何还是AfxMessageBox("Fail");???????? AfxMessageBox(NULL,"sdfsdf","dsfsdf",MB_OK); vc帮助项只见有
int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );
int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT) -1 );
Return Value
未曾见AfxMessageBox(NULL,"sdfsdf","dsfsdf",MB_OK);带四个参数的啊? 看了arx帮助项后,
理论上应该可以的了啊?为何还是弹出fail对话框?
如何在arx中插入断点和打开watch窗口? 呵呵,两个方法可以解决你的问题:
1,将你的dll文件复制到windows的系统目录下;
或者
2,在程序里面设置一下当前目录为dll所在的目录,
试一下 没错的 确实ok了,非常感谢10house!!!
用的是——将我的dll文件复制到windows的系统目录下
but
sorry!
2,在程序里面设置一下当前目录为dll所在的目录,这个......如何设置呢?
页:
[1]