精华内容
下载资源
问答
  • MFC 动态库的应用实例

    2018-10-09 17:26:02
    目的:掌握dll动态链接的做法。初步了解团队合作的工作方式。 内容:把完成的MFC工程移植到MFC扩展dll里。写一个exe测试程序,调用该dll。1能够运行,没有错误。 2 用文档中的方法来实现。
  • c#调用MFC动态库实例

    2018-07-27 17:46:27
    C#调用C++动态库示例程序,暂时没有文档,程序很简单,非常好懂
  • MFC动态库应用开发

    2015-03-22 00:56:20
    这是一个学习MFC动态库应用的源码,集成了MDI和动态开发技术。
  • VS2015中用C++创建MFC DLL动态库,包含了mfc dll的创建以及在控制台中调用
  • //==================================================MFC================================================== void ShowTest() { AFX_MANAGE_STATE(AfxGetStaticModuleState());////需要加上.不然调用带界面的...

    代码如下:

    //==================================================MFC==================================================
    void ShowTest()
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());需要加上.不然调用带界面的MFC_DLL的话界面不会显示.
    	qTestDll dlg;
    	dlg.DoModal();//界面调用
    }
    //==================================================QT==================================================
    //调用MFC_DLL
    void qMfcTest::on_pushButton_clicked()
    {
        QLibrary lib("TEST_DLL_QT.dll");//MFC动态库名称(与.exe程序放同一级目录下)
    
        if(lib.load())
        {
            QMessageBox::information(this, "提示", "加载成功...");
            
            typedef void (*TestInterfaceFunType)();
    
            TestInterfaceFunType TestInterfaceFun = (TestInterfaceFunType)lib.resolve("ShowTest");//"ShowTest"为MFC_DLL接口函数
        
            TestInterfaceFun();//调用该接口函数
        }
        else
        {
            QMessageBox::information(this, "提示", "加载失败...");
            QMessageBox::information(this,"bad",lib.errorString());//弹出错误原因
            return;
        }
    }

    讲一讲学习过程遇到的几个问题:

    1. 提示加载失败,错误消息为找不到该动态库.

    解决:动态库应该放在.exe同级目录下.

    2. 提示加载失败,错误消息为一串错误代码.

    原因:QT编译为64位,MFC_DLL位32位.

    解决:把QT程序改为32位编译.

    3. 调用带界面的MFC_DLL,界面不显示.

    解决:调用界面前加上AFX_MANAGE_STATE(AfxGetStaticModuleState();

    展开全文
  • 学习调用MFC共享动态库,在调用MFC共享动态库时要进行模块的切换,否则无法少生结果,尽管编绎和运行都没有错。可以用显式调用和隐式调用, 学习共享MFC DLL 的规则 DLL 的模块切换,共有3种方式: 方式一:在 DLL ...
  • 下面就以工作中开发C++动态库为例分享一下,使用vs2017创建C++MFC动态库案例。    下面创建C++MFC项目     转载于:https://my.oschina.net/u/3435444/blog/1593815

        今天无意间浏览了一些关于vs2017新功能的介绍,特别是微软发部了Visual Studio Installer,这个集成安装工具简约的操作风格,丰富vs开发内容,真正打通了开发的“最后一公里”。下面就以工作中开发C++动态库为例分享一下,使用vs2017创建C++MFC动态库案例。

     

        下面创建C++MFC项目

        

        

    转载于:https://my.oschina.net/u/3435444/blog/1593815

    展开全文
  • VC++非MFC动态库创建及使用

    千次阅读 2016-07-10 17:45:46
    概念:1,DLL Dynamic Linkable Library,动态链接库,可以看成一种函数仓库,提供直接拿来用的变量、函数或类。 2,静态链接库lib,动态链接库dll,都是共享代码...3,VC++支持三种DLL,分别是非MFC动态库(Non-MFC

    概念:

    1,DLL Dynamic Linkable Library,动态链接库,可以看成一种函数仓库,提供直接拿来用的变量、函数或类。
    2,静态链接库lib,动态链接库dll,都是共享代码的方式。如果用静态链接库,lib中的指令直接包含在exe文件中。如果是dll,exe执行时动态的引用和卸载dll,dll与exe是相互独立的。
    3,VC++支持三种DLL,分别是非MFC动态库(Non-MFC DLL)、MFC Regular DLL(MFC规则DLL),MFC Extension DLL(MFC 扩展 DLL)
    非MFC动态链接库:不采用MFC类库结构,导出函数为标准C接口,能被MFC和非MFC编写的应用程序所调用。
    MFC规则DLL:包含继承自CWinApp的类,但无消息循环。
    MFC扩展DLL:采用MFC动态连接版本,它只能被用MFC类库编写的应用程序调用。

    创建dll

    注意:这里指的是创建Non-MFC DLL
    第一步:在VC6.0中新建一个 Win32 Dynamic-Link Library。这里新建了一个名叫dllTest的工程(弹出的对话框直接默认下一步就好啦)

    这里写图片描述

    第二步:dllTest工程中,添加dll.cpp,dll.h文件,其内容如下:
    dll.h

    #ifndef DLL_H
    #define DLL_H
    extern "C"  int _declspec(dllexport) add(int x,int y);
    #endif 
    

    dll.cpp

    #include "dll.h"
    int add(int x,int y)
    {
    	return x + y;
    }
    

    上述代码,实现了一个函数:两个int类型变量相加。在头文件中,用extern “C” int _declspec(dllexport) add(int x,int y); 告诉编译器这个函数是dllexport(dll导出函数)。_declspec 这个标识符很好记住 “decl”are声明+“spec”ial特别的(仅为个人理解,方便记忆)
    之后,编译、链接生成dllTest.dll文件。
    另一种声明dll导出函数的方式:
    用模块定义(.def)文件,同样可以实现该功能。其代码如下
    dll.def

    LIBRARY dllTest
    EXPORTS
    add @ 1
    

    dll调用

    编译、链接后,会在Debug目录下生成dllTest.dll文件,另外还会生成 dllTest.lib文件(该文件也挺有用的),dll.h文件有时也会用到。
    额外说一句:为什么要用到dll?
    简单来说:”钱=版权“问题。dll类似一个黑盒,你只能调用其提供的接口。你完全不知道里面的代码是如何实现的,除非DLL提供者愿意让你看源码,否则你只能瞎猜啦。这样就很好的保护了版权(money)的问题。
    dll调用有两种方式:动态调用和静态调用。动态:完全由使用者加载和卸载dll。静态:编译系统完成 dll的加载和卸载。下面给出两种方式的 代码,这两种代码就其效果来看,是一样的。
    动态:
    新建工程,将“dllTest.dll"文件放在工程目录下。
    main.cpp

    #include "stdio.h"
    #include "windows.h"
    //函数指针类型
    typedef int ( * lpAddFun)(int,int);
     
    int main(int argc, char* argv[])
    {
        HINSTANCE hDll;   //DLL句柄	
    	lpAddFun addFun;  //函数指针
    	//加载dll
        hDll = LoadLibrary("dllTest.dll");
    	if (hDll != NULL)
    	{
    		//得到函数地址
    		addFun = (lpAddFun)GetProcAddress(hDll,"add");	
    		if(addFun!=NULL)
    		{
    		    int result =  addFun(2,3);    
    			printf("%d",result);
    		}
    		//释放dll
    		FreeLibrary(hDll);
    	}	
    	return 0;
    }
    

    静态:
    新建工程,将“dllTest.dll和dllTest.lib"文件放在工程目录下。
    main.cpp

    #include "stdio.h"
    #include "windows.h"
    //加入lib文件
    #pragma comment(lib,"dllTest.lib") 
    //声明导入的函数 dllimport
    extern "C" _declspec(dllimport) add(int x,int y); 
    
    int main(int argc, char* argv[])
    {
       	int result =  add(2,3);    
    	printf("%d",result);
    	
    	return 0;
    }
    

    lib文件中,包含了dll导出函数的符号名及序号(就是数字,比如数字1)。静态调用,就是通过调用lib中的函数符号,再由编译系统自动调用dll中对应的函数符号,完成对函数的使用。

    那么头文件(如本例中的 dll.h)有什么用呢?
    答:dll不仅可以用在函数上,还可以用在类上。在生成dll的 头文件中,包括对类或函数的声明。新建工程中,导入该头文件,可以很方便的调用知道有哪些函数或者成员函数(类)。而函数具体如何实现,放在dll中。

    展开全文
  • 经过测试,在所制作的带界面的动态库在windows系统中的控制台程序和MFC程序都能顺利调用。 动态库制作 1、建立MFC动态库 2、添加资源Dialog 右键dll项目,添加->资源->Dialog,在窗体上右键添加类,命名类名...

    以下内容参考dll制作与应用,感谢!
    经过测试,在所制作的带界面的动态库在windows系统中的控制台程序和MFC程序都能顺利调用。
    动态库制作
    1、建立MFC的动态库
    在这里插入图片描述2、添加资源Dialog
    右键dll项目,添加->资源->Dialog,在窗体上右键添加类,命名类名,选择基类为CDialog,生成.cpp和h文件。(找不到窗体可以选择资源视图Dialog里面)
    在这里插入图片描述
    3、声明和定义类和程序
    在类生成的.h文件中声明一个类和函数,本文是Mydll.h.如要导出至另一程序使用,要加上_declspec(dllexport),如下

    CMydll mydlg;//CMydll为自添加的类
    extern "C" _declspec(dllexport) void myfunc();
    

    在cpp文件中定义函数体,如下

    void myfunc()
    {
    	//显示窗体
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    	mydlg.DoModal();
    }
    

    4、导出
    在def文件中添加需要导出的函数,如下
    在这里插入图片描述
    生成之后就可以看到dll文件和lib文件了,在哪用就拷贝过去就行

    调用
    可在MFC窗体调用,也可在控制台程序中调用,调用方法如下:
    1、添加头文件#include<Windows.h>
    2、调用函数
    在需要调用的函数中添加如下代码

    /*函数指针*/
    	typedef void(*Funp)(void);
    	/*加载动态库*/
    	HMODULE hmodule = LoadLibrary("DLL120901");
    	/*如果调用成功*/
    	if (hmodule) 
    	{
    		/*获取函数*/
    		Funp dll_func = (Funp)GetProcAddress(hmodule, TEXT("myfunc"));
    		/*判断函数执行*/
    		if (dll_func != NULL) 
    		{
    			cout << "dll加载成功!" << endl;
    			dll_func();
    		}
    		else 
    		{
    			cout << "无法找到DLL" << endl;
    		}
    		/*释放函数库*/
    		FreeLibrary(hmodule);
    	}
    	else
    	{
    		cout << "加载失败!" << endl;
    	}
    

    最后结果如图,剩下的就可以自己在窗体上发挥了。再次说明,本文参考dll制作与调用,感谢原作者
    在这里插入图片描述

    展开全文
  • 简介:本人学习Qt一个星期了,利用Qt做的仿360界面,然后打包成动态库。 用C++的MFC对话框按钮调用Qt界面动态库,经测试成功。
  • vs2010编写mfc动态库

    千次阅读 2015-01-19 15:57:11
    首先,打开vs2010,新建一个项目。 选择MFC中的MFC DLL,并命名。...我们可以自己添加一个GetData.h文件和GetData.cpp文件,来编写实际动态库中的代码。 例如GetData.cpp中有如下内容: int Veri
  • MFC计算器源码+动态库源码,打开计算器之后,用VC打开计算器.dsw,编译,运行之后,会出一个缺少动态库的提示,把该文件夹下的jsp.dll拷贝到Debug下再次运行程序
  • 做VS2010做动态库编程时,若采用MFC静态库lib编程有时编译通不过,用共享dll编程时,在有些电脑上会少了这些dll,这些dll就在这里
  • MFC 动态链接的使用

    2016-03-23 17:23:01
    MFC创建和使用动态链接的样例代码。帮助新手学习。共同进步
  • MFC的对话框装载资源是通过获取当前线程对应的ModuleState保存的ResourceHandler来装载资源的。 所以,dll里的代码,需要在函数的入口,首先把当前执行线程的ModuleState换成该dll的State,这样才能装载该dll的...
  • MFC动态链接的创建以及使用

    千次阅读 2019-12-21 18:43:58
    一、创建动态链接库 1.右击应用程序的解决...进入动态库属性页,选择C/C++>>预处理器>>预处理器定义,将上一步所设定的TEST_Dll_EXPORT添加进去 二、动态链接库的引用 1.添加头文件以及lib文件 ...
  • wxWidget多语言移植到MFC动态库DLL

    热门讨论 2011-07-05 08:42:30
    如题目,MFC多语言-wxWidgets移植法采用的动态库源码。
  • 一般我们的dll都有隐式的dllmain,普通的dll可以直接手写dllmain,但是mfc的dll因为会调用mfc库,dllmain已经存在,如果直接编译会出现 如上,dllmain重定义问题 我看了半天,网上有一种方法:项目-》属性-》...
  • MFC 动态库文件

    2013-05-21 12:09:23
    在windows上用VC6.0编写的MFC应用程序在其他没有安装VC6.0的电脑上无法运行时,是因为缺少动态库文件,把可执行程序与动态库文件放在一起就可以运行了,我这个就是4个必要的动态库文件。
  • C++动态链接库DLL-非MFC动态库

    千次阅读 2015-10-14 19:46:43
    文件一般又分为静态链接(.lib)和动态链接(.DLL)。如果采用静态链接,则lib中的指令代码都将包含在最终生成的exe文件中。若是使用动态链接,则其代码不会包含在EXE中,可以动态的装载和卸载DLL文件。...
  • 带对话框的MFC动态库源代码及调用程序代码
  • 1、利用MFC Dll向导初始生成一个mfc dll(默认设置); 2、添加一个对话框资源; 3、向工程中添加一个.h、.cpp文件,作为外部的接口; 4、.h头文件的格式仿照于基于控制台的dll的头文件格式; 5、.h头文件中包括资源...
  • MFC扩展动态库的内部可以使用MFC,导出的函数或者类也可以是MFC类型的。一般使用MFC扩展动态库来包含一些MFC的增强功能,比如扩展MFC的CStatic或者CButton等控件类,使其具备更强大的功能。
  • 创建MFC项目时,选择动态库和静态库的区别动态库在VS2017版本中,选择的时候是叫“在共享DLL中使用MFC”。这样创建的时候生成的*.exe文件一般较小,原因有几点1. 此*.exe程序内部,一般不会包含文件所需要的库,其...
  • MFC运行库(MFC程序运行所需动态库
  • QT使用MFC编译的

    2021-03-27 16:59:01
    假定读者已有知识点 ...2、动态库 3、函数编译名称 4、MFC动态链接库和静态链接库的区别 5、extern "C"的作用 6、__stdcall和__cdecl调用区别 如果有不明白的,请移步另外一位作者文章或者自行百度 ...
  • 得到mfc动态库的路径

    千次阅读 2009-07-15 14:20:00
    定位问题的能力是程序员必须的能力一个mfc的dll,客户想调用这个动态库,这个库要知道自己的路径是在什么位置. 问题产生出来了.用得到一个进程的路径只有用GetModuleFileName(HMODULE ,strPath,MAX_PATH);第一个参数...
  • MFC动态链接和WIN32动态链接区别: 通过MFC创建DLL你必须链接MFC,无论动态或静态,优点是如CString等,促使开发方便,缺点是静态链接臃肿,动态链接必须附带mfc,部署不方便。 mfc使用mfc类库建立的dll 而win...
  • MFC加载动态链接方法 1、LoadDll.cpp 1 #include "StdAfx.h" 2 #include "LoadDLL.h" 3 4 pMFCCallBackDll DLL_MFCCallBackDll; 5 ...
  • MFC创建及引用动态链接

    千次阅读 2018-01-25 13:33:38
    1.创建动态链接文件 创建MFC(DLL)程序项目 定义一个对话框函数 void _stdcall ShowDlg() { MessageBox(NULL,_T("动态链接中的对话框!"),_T("提示"),0); }修改.def文件; SkinDLL.def : 声明 DLL 的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,609
精华内容 14,643
关键字:

mfc动态库