none
dll的问题 RRS feed

  • 问题

  • 控制台项目
    调用dll函数

    int add(int a, int,b)

    {return(a+b);}

    导出dll,可以调用

    在return(a+b);}前面加一个messagebox("faf"); 就出错,why?


    2011年12月21日 4:59

答案

  • 你好!

    首先,在win32 console application,可以调用MessageBox函数弹出对话框。比如下面的语句:

    ::MessageBox(NULL,"how are you?", "hello",MB_OKCANCEL);

    会弹出如下图所示的对话框:

     

    “我有一个空函数,里面有事件,就是弹出messagebox对话框",我对这句话的理解是,你有一个返回值和参数都为空的函数,这个函数内部调用MessageBox弹出对话框,而且这个函数是事件的处理函数。这样在控制台程序中也是可以的如期执行的。你可以参看我在SkyDrive 上的C++代码:https://skydrive.live.com/?cid=5f3fd51d13056967&id=5F3FD51D13056967%21114

    我定义了一个返回值为int 的函数,

    int func()
    {
       return ::MessageBox(NULL,"how are you??? Fine. And you?", "hello",MB_OKCANCEL);
    }

     在main函数中调用是也没有问题的。

    希望我的回复对你有所帮助!

    谢谢!

     

     


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us

    2011年12月27日 6:43

全部回复

  • 什么错?编译错误?


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年12月21日 5:16
    版主
  • 在导出函数调用所有MFC资源函数都要在调用前进行资源切换。
    麻烦把正确答案设为解答。
    • 已标记为答案 Honny_yeyh 2011年12月21日 12:11
    • 取消答案标记 Honny_yeyh 2011年12月21日 12:17
    2011年12月21日 9:22
    版主
  •   我函数是在vb里面写的,是把txt转化为mdb数据库, 然后用第三方工具导出普通dll,然后在c++里面调用,运行到函数体的时候直接跳过去了,根本没有运行

     

    #include "stdafx.h"
    #include <windows.h>
    #include <stdio.h>

    typedef double (__stdcall * PADD)(double,double);
    typedef void (__stdcall * Connect)(void);

    int main(int argc, char * argv[])
    {
     HINSTANCE hinstDLL=NULL;  
     PADD Procadd = NULL;
     Connect pConnect=NULL;
     hinstDLL = LoadLibrary("Testdll.dll");

     if (hinstDLL)
     {

      Procadd = (PADD)GetProcAddress (hinstDLL,"addition");
      if (Procadd == NULL)
      {
       FreeLibrary(hinstDLL);
       return -1;
      }
      double dRet = Procadd(2.3,4.5);                    //这里能运行
      printf("%lf\n",dRet);
      
      pConnect = (Connect)GetProcAddress (hinstDLL,"mathadd");
      if (Procadd == NULL)
      {
       FreeLibrary(hinstDLL);
       return -1;
      }
      Connect();
      GetLastError();
      Connect();
      
     }
     
     FreeLibrary(hinstDLL);
     return 0;
    }


    2011年12月21日 12:15
  • 最后两个Connect();
    函数都没有运行
    2011年12月21日 12:16
  • pConnect = (Connect)GetProcAddress (hinstDLL,"mathadd");
    这里返回的pConnect为NULL ?
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年12月22日 1:36
    版主
  • pConnect = (Connect)GetProcAddress (hinstDLL,"mathadd");
    这里返回的pConnect为NULL ?
    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.


    pConnect没有为NULL

      Connect();           //没有运行
      GetLastError();    //运行
      Connect();          //没有运行

    2011年12月22日 4:37
  • 在你的原帖中。return语句之前为什么要加上messagebox语句?

    你的connect函数是干什么的?建议你把connect函数的定义贴出来。

    你怎么判断出Connect()没有运行的?

    GetLastError 运行之后得到什么error message?

     


    Please mark this reply as answer if it helps you! Thanks for your cooperation! Good Luck to you.
    2011年12月23日 6:51
  • dll是用第三方工具在vb里面编译的

    代码是

    public function mathadd()

    msgbox("fff")

    end function



    2011年12月25日 5:44
  • Honny_yeyh你好!

    我了解到,你是利用第三方工具从VB导出DLL,在C++中调用。你确信导出的DLL没有错误吗?

    我觉得这个问题好像跟C++本身没有多大关系。

    很可能是第三方的工具造成的不匹配,也有可能是你的VB程序有错误,

    我建议你在用C++重建一个DLL实现相似的功能,然后在你的项目中调用这个DLL。

    如果还有什么问题的话,欢迎你贴出来,我们会继续帮你解决。

    祝你好运!


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 Honny_yeyh 2011年12月27日 4:21
    • 取消答案标记 Honny_yeyh 2011年12月27日 4:21
    2011年12月27日 3:48
  • 我想要问的问题是:
    c++语言里有函数,方法,事件等,我有个空函数,里面有事件,就是弹出messagebox对话框
    另外一个函数返回整型,里面也有弹出messagebox对话框
    请问在控制台调用的时候都能如期执行吗?

    如果都能如期执行的话,普通函数和方法,事件就没什么两样了

    2011年12月27日 4:27
  • 你好!

    首先,在win32 console application,可以调用MessageBox函数弹出对话框。比如下面的语句:

    ::MessageBox(NULL,"how are you?", "hello",MB_OKCANCEL);

    会弹出如下图所示的对话框:

     

    “我有一个空函数,里面有事件,就是弹出messagebox对话框",我对这句话的理解是,你有一个返回值和参数都为空的函数,这个函数内部调用MessageBox弹出对话框,而且这个函数是事件的处理函数。这样在控制台程序中也是可以的如期执行的。你可以参看我在SkyDrive 上的C++代码:https://skydrive.live.com/?cid=5f3fd51d13056967&id=5F3FD51D13056967%21114

    我定义了一个返回值为int 的函数,

    int func()
    {
       return ::MessageBox(NULL,"how are you??? Fine. And you?", "hello",MB_OKCANCEL);
    }

     在main函数中调用是也没有问题的。

    希望我的回复对你有所帮助!

    谢谢!

     

     


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us

    2011年12月27日 6:43