我在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调用不一样啊?

解决方案 »

  1.   

    你用的是DLL显式加载,这不适用于MFC Extension DLL;我这几天也在研究DLL方面的问题,发现只能用隐式加载MFC Exten
      

  2.   

    因为卡住了,下接上文:
    你在编写扩展DLL时,主要目的是导出MFC的类,可在类声明中插入一个MFC宏,如下:
    class AFX_EXT_CLASS classname:public classname
      

  3.   

    不好意思,因为浏览器出错,又被卡了。
    你若是只在DLL中用到MFC类则只需要用Regular DLL。这样可以方便的采用显式加载,方法就如同你所示的代码。
      

  4.   

    缺少调用约定。
    __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加载失败");
    }
      

  5.   

    问楼主一下:
    函数名写入def文件了吗?