| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2604 人关注过本帖
标题:调用DLL里的函数
只看楼主 加入收藏
hejianhack
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-8-10
收藏
 问题点数:0 回复次数:4 
调用DLL里的函数
我想写一个程序,用来调用DLL里的函数
函数原型是        HRESULT WINAPI DllInstall( BOOL bInstall, LPCWSTR pszCmdLine);
第一个参数可以设置NULL;
第二个参数是UNICODE版本的;
我该如何写这个程序呢

最好详细点啊,多谢各位了
搜索更多相关主题的帖子: DLL 函数 
2009-09-13 11:38
lixingjiang
Rank: 3Rank: 3
来 自:滁州学院
等 级:论坛游侠
帖 子:104
专家分:184
注 册:2009-4-17
收藏
得分:0 
从网上搜的,希望对你有用!!!



我在Visual   C++   2003中,建立了一个Win32   DLL项目名叫DllTest2,在“应用程序设置”中选定了“导出符号”,然后在VC自动生成的代码中,有DllTest2.h:   
     
  //   下列   ifdef   块是创建使从   DLL   导出更简单的   
  //宏的标准方法。此   DLL   中的所有文件都是用命令行上定义的   DLLTEST2_EXPORTS   
  //   符号编译的。在使用此   DLL      
  //任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将      
  //   DLLTEST2_API   函数视为是从此   DLL   导入的,而此   DLL   则将用此宏定义的   
  //   符号视为是被导出的。   
  #ifdef   DLLTEST2_EXPORTS   
  #define   DLLTEST2_API   __declspec(dllexport)   
  #else   
  #define   DLLTEST2_API   __declspec(dllimport)   
  #endif   
     
  //   此类是从   DllTest2.dll   导出的   
  class   DLLTEST2_API   CDllTest2   {   
  public:   
  CDllTest2(void);   
  //   TODO:   在此添加您的方法。   
  };   
     
  extern   DLLTEST2_API   int   nDllTest2;   
     
  DLLTEST2_API   int   fnDllTest2(void);   
     
  有DllTest2.cpp:   
  //   DllTest2.cpp   :   定义   DLL   应用程序的入口点。   
  //   
     
  #include   "stdafx.h"   
  #include   "DllTest2.h"   
  BOOL   APIENTRY   DllMain(   HANDLE   hModule,      
                                                DWORD     ul_reason_for_call,      
                                                LPVOID   lpReserved   
    )   
  {   
  switch   (ul_reason_for_call)   
  {   
  case   DLL_PROCESS_ATTACH:   
  case   DLL_THREAD_ATTACH:   
  case   DLL_THREAD_DETACH:   
  case   DLL_PROCESS_DETACH:   
  break;   
  }   
          return   TRUE;   
  }   
     
  //   这是导出变量的一个示例   
  DLLTEST2_API   int   nDllTest2=0;   
     
  //   这是导出函数的一个示例。   
  DLLTEST2_API   int   fnDllTest2(void)   
  {   
  return   42;   
  }   
     
  //   这是已导出类的构造函数。   
  //   有关类定义的信息,请参阅   DllTest2.h   
  CDllTest2::CDllTest2()   
  {      
  return;      
  }   
  就这样编译后得到一些文件,然后建立一个Win32应用程序,想在代码中调用fnDllTest2,该怎样调用呢?   
  在网上找,找到两个代码片段:   
  第一个:   
  HMODULE   hModule;   
  FARPROC   lpFunc;   
  hModule=LoadLibrary("DllTest2.DLL");//调试时hModule为0x10000000   
  if(hModule)   
  lpFunc=GetProcAddress(hModule,"fnDllTest2");   
  if(lpFunc   !=   (FARPROC)NULL))//运行时lpFunc始终为0   
  a   =   (*lpFunc)();   
  FreeLibrary(hModule);   
     
  第二个:   
  HMODULE   hModule;   
  typedef   int(CALLBACK*   fnGetNumber)(void);   
  fnGetNumber   GetNumber;   
  hModule   =   LoadLibrary("DllTest2.dll");//调试时hModule为0x10000000   
  GetNumber   =(fnGetNumber)GetProcAddress(hModule,"fnDllTest2");   
  if(GetNumber)//运行时GetNumber始终为0   
  a   =   GetNumber();   
  FreeLibrary(hModule);   
  因为lpFunc,GetNumber为0(hModule都不为0,为什么他为0呢),所以无法调用函数fnDllTest2。   
  这两个代码段有没有错呢,还是它们不适合用来调用VC++2003自动生成的Dll。   
  怎样在Win32程序中调用DLL中的函数呢,就调用那个上面的fnDllTest2,如果包含DllTest2.h,附加DllTest2.lib就可以调用,不过这样一来,就不用LoadLibrary,GetProcAddress都解决了,可不可以不包含DllTest2.h,不附加DllTest2.lib,调用fnDllTest2呢  

为梦想冲刺
2009-09-13 12:34
李光亮
Rank: 2
等 级:论坛游民
帖 子:43
专家分:51
注 册:2009-9-21
收藏
得分:0 
2009-10-06 10:15
JackBenz
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-10-7
收藏
得分:0 
感谢二楼的解答呢~~O(∩_∩)O~

2009-10-07 17:00
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:0 
这个是VC++的问题。

要练习算法就来http:///!!有挑战哦!!
2009-10-07 17:27
快速回复:调用DLL里的函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.089951 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved