我在MFC扩展DLL中写了一个函数:
__declspec(dllexport) BOOL isOdd(int num)
{
if(num % 2 == 0)
return true;
else
return false;
}在另一个测试程序中这样调用:
typedef BOOL ISODD(int);
ISODD *isOdd; HINSTANCE hm;
if(hm = ::LoadLibrary("mfcdll3.dll"))
{
isOdd = (ISODD *)::GetProcAddress(hm,"isOdd");
if(isOdd)
{
if(isOdd(8))
MessageBox("是偶数");
else
MessageBox("不是偶数");
}
else
{
MessageBox("有问题");
}
::FreeLibrary(hm);
}
else
{
MessageBox("DLL加载失败");
}但是有问题,是不是和普通的DLL调用不一样啊?
__declspec(dllexport) BOOL isOdd(int num)
{
if(num % 2 == 0)
return true;
else
return false;
}在另一个测试程序中这样调用:
typedef BOOL ISODD(int);
ISODD *isOdd; HINSTANCE hm;
if(hm = ::LoadLibrary("mfcdll3.dll"))
{
isOdd = (ISODD *)::GetProcAddress(hm,"isOdd");
if(isOdd)
{
if(isOdd(8))
MessageBox("是偶数");
else
MessageBox("不是偶数");
}
else
{
MessageBox("有问题");
}
::FreeLibrary(hm);
}
else
{
MessageBox("DLL加载失败");
}但是有问题,是不是和普通的DLL调用不一样啊?
解决方案 »
- 想离开目前的公司,但很是矛盾和纠结!
- 如何改变edit空间中光标的颜色,或者让光标不显示!!!!!!!!!!!!
- 我要判断一个进程是否存在应该怎么做?MFC下面的
- 新手提问:大家帮帮忙!
- 请问:单视图中能否将鼠标点中状态栏的信息发送与当前视类?如何实现?
- 解决后立即给分!我在使用CTabCtrl 控件时为什么用GetItem(sel, &item)得不到当前的标题,并且返回值始终为FALSE?
- 如何在VC中实现CB中的三层结构操作数据库!!
- VS 2005 MFC 函数功能的复制
- 有谁知道如何加一个CWnd的派生类
- 非巨牛莫入,这次是真的!!!!!!!!!!!!!!!!!!!!
- 请教达人!!!
- 请精通MFC的高手解答一下,顶者有分,这个问题不抱太大的希望!
你在编写扩展DLL时,主要目的是导出MFC的类,可在类声明中插入一个MFC宏,如下:
class AFX_EXT_CLASS classname:public classname
你若是只在DLL中用到MFC类则只需要用Regular DLL。这样可以方便的采用显式加载,方法就如同你所示的代码。
__declspec(dllexport) _stdcall BOOL isOdd(int num)
{
if(num % 2 == 0)
return true;
else
return false;
}在另一个测试程序中这样调用:
typedef _stdcall BOOL ISODD(int);
ISODD *isOdd; HINSTANCE hm;
if(hm = ::LoadLibrary("mfcdll3.dll"))
{
isOdd = (ISODD *)::GetProcAddress(hm,"isOdd");
if(isOdd)
{
if(isOdd(8))
MessageBox("是偶数");
else
MessageBox("不是偶数");
}
else
{
MessageBox("有问题");
}
::FreeLibrary(hm);
}
else
{
MessageBox("DLL加载失败");
}
函数名写入def文件了吗?