以下是我的DLL中的代码。(MFC向导生成的DLL)DLL名字为Manager.dll
extern "C" _declspec(dllexport) int Managercu()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// normal function body here
AfxMessageBox("新DLL");
return 0;
}
//下面是得到这个函数的另一程序中的代码却得不到。此程序框架是多窗口的MDI。
//运行到这句话时int iTemp = Proc();出错误。应该怎么解决呢?
//多问一下。应该样把程序中的参数传到DLL中去呢。
void CMainFrame::OnCuPZ()
{
typedef int(_cdecl *MaCu)();
HINSTANCE hinstDLL=NULL;
hinstDLL=LoadLibrary("Manager.dll");
if (hinstDLL)
{
MaCu Proc;
Proc = (MaCu)GetProcAddress(hinstDLL,"Managercu");
int iTemp = Proc();
FreeLibrary(hinstDLL);
}
else
{
MessageBox("用户Manager.DLL丢失!请重新安装程序","提示",MB_OK|MB_ICONINFORMATION);
}
}//上面是得到这个函数的另一程序中的代码却得不到。此程序框架是多窗口的MDI。
//运行到这句话时int iTemp = Proc();出错误。应该怎么解决呢?
//多问一下。应该样把程序中的参数传到DLL中去呢。
extern "C" _declspec(dllexport) int Managercu()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// normal function body here
AfxMessageBox("新DLL");
return 0;
}
//下面是得到这个函数的另一程序中的代码却得不到。此程序框架是多窗口的MDI。
//运行到这句话时int iTemp = Proc();出错误。应该怎么解决呢?
//多问一下。应该样把程序中的参数传到DLL中去呢。
void CMainFrame::OnCuPZ()
{
typedef int(_cdecl *MaCu)();
HINSTANCE hinstDLL=NULL;
hinstDLL=LoadLibrary("Manager.dll");
if (hinstDLL)
{
MaCu Proc;
Proc = (MaCu)GetProcAddress(hinstDLL,"Managercu");
int iTemp = Proc();
FreeLibrary(hinstDLL);
}
else
{
MessageBox("用户Manager.DLL丢失!请重新安装程序","提示",MB_OK|MB_ICONINFORMATION);
}
}//上面是得到这个函数的另一程序中的代码却得不到。此程序框架是多窗口的MDI。
//运行到这句话时int iTemp = Proc();出错误。应该怎么解决呢?
//多问一下。应该样把程序中的参数传到DLL中去呢。
在你的DLL文件里面加上两个函数看看
BOOL CXXXDllApp::InitInstance ()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return TRUE;
}BOOL CXXXDllApp::ExitInstance ()
{
return TRUE;
}
当然,你得在H文件里面声明一下
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// normal function body here
AfxMessageBox("新DLL");
return 0;
}
楼上,这里面我不是已经声明了吗?
这个估计失败了,你最好用depends工具看一下生成的dll里面实际的函数名字
在vc下面即使用了 extern "C" 也不见得一定不改名字
你可以在“Proc = (MaCu)GetProcAddress(hinstDLL,"Managercu")”语句的下面再加入:
if (Proc)
{
handletype=1;
Proc(1,hinstDLL);
}
FreeLibrary(hinstDLL);
然后在DLL文件中的Managercu函数内再加入:
if (handletype==0)
{
.
.
.
}
if (handletype==1)
{
.
.
.
}
extern "C" _declspec(dllimport) int Managercu()
谢谢,请提供一个解决的想法。
分不够再加。
?这个应该怎么做呢?谢谢了。
2.编译dll
3.拷贝dll
4. 使用dll的程序中 类的定义 也改成 class AFX_EXT_CLASS CYourClass
5.编译使用dll的程序