简单的动态连接库,例子

首先,我们知道VC的三种Dll分别是

1.non_MFC Dll

2.MFC Regular Dll

3.MFC Extension Dll

 

平时我们使用在代码中的:

#pragma comment(lib,"Test_of_dll.lib")

的意思是指文中生成的obj文件应该与Test_of_dll.lib一起链接.或者可以在VC的工程中设置加载此lib

 

下面,来做一个简单动态Dll

新建一个Win32 Application,application setting中勾选Dll,完成.添加如下文件后,编译链接.

 

lib.h文件如下:

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

lib.cpp文件如下:

#include"stdafx.h"
#include"lib.h"

int add(int x,int y)
{
	return x + y;
}

之后另外新建一个工程,调用此工程生成的Dll,Test_of_nonMFCdll.dll

代码如下:

// Test_of_dllCall.cpp : Defines the entry point for the console application.
//

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

typedef int(*lpAddFun)(int, int);	//宏定义函数指针类型

int _tmain(int argc, _TCHAR* argv[])
{
	HINSTANCE hDll;		//Dll句柄
	lpAddFun addFun;	//函数指针
	hDll=LoadLibrary("..\\..\\Debug\\Test_of_nonMFCdll.dll");

	if(NULL!=hDll)
	{
		addFun=(lpAddFun)GetProcAddress(hDll,"add");

		if(NULL!=addFun)
		{
			int  result = addFun(2, 3);
			printf("The result of addFun is %d \n",result);
			getchar();
		}

		FreeLibrary(hDll);
	}
	return 0;
}

注意其中的路径,要根据Dll所在做变化,不然找不到相应的Dll:

hDll=LoadLibrary("..\\..\\Debug\\Test_of_nonMFCdll.dll");

调用后的结果:

The result of addFun is 5

 

 

 

时间: 2024-10-10 13:30:11

简单的动态连接库,例子的相关文章

在存储过程中调用外部的动态连接库

问题的提出: 一般我们要根据数据库的纪录变化时,进行某种操作.我们习惯的操作方式是在程序中不停的查询表,判断是否有新纪录.这样耗费的资源就很高,如何提高这种效率,我想在表中创建触发器,在触发器中调用外部动态连接库通过消息或事件通知应用程序就可实现.而master的存储过程中最好能调用外部的动态连接库,我们在触发器中调用master的存储过程即可. 说明:VC6需要安装较新的Platform SDK才能顺利编译本代码,VC.Net可以直接编译本代码.另外还需要连接Opends60.lib 为了使没

Windows Api学习笔记-动态连接库(DLL)的使用

#include <windows.h> #include <iostream> #include "12dll.h" using namespace std; #pragma comment(lib,"12Dll")//要链接到什么库文件 void main() { //CMy12Dll a; cout<<fnMy12Dll()<<endl; char b; cin>>b; } VS2008 新建WIN3

简单的ajax连接库分享

 自己写了一个简单的ajax连接库,没有使用jquery的ajax,这个代码要比jquery轻量,大家参考使用吧,  代码如下: var ajax = {  init : function(){   var xmlHttp = new XMLHttpRequest();   if (!window.XMLHttpRequest)      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");     return xmlHttp;  },  c

c++动态连接库中的函数返回值为指针,请问在主程序中如何调用这个库的函数。

问题描述 c++动态连接库中的函数返回值为指针,请问在主程序中如何调用这个库的函数. [code=c]extern "C" int __declspec(dllexport)add(int x, int y); extern "C" int __declspec(dllexport)*add1(); int add(int x, int y) { return x + y; } int *add1() { static int a[3]={1,2,3}; stati

c++-我想写一个类动态连接库

问题描述 我想写一个类动态连接库 怎么写c++类动态连接库,就是导出一个类.然后写一个控制台程序调用出来. 解决方案 写完之后你把它编译成dll就行了,放在其他项目里直接引用 解决方案二: 在需要导出的类声明前面加上 declspec(dllexport)就可以导出到dll中了. 在另外一个工程使用该类的时候,需要在类名前加上declspec(dllimport)用来导入. 解决方案三: http://www.cnblogs.com/cswuyg/archive/2011/10/06/DLL2.

c++调用matlab生成的Dll动态连接库

点击打开链接http://download.csdn.net/detail/nuptboyzhb/4228429 c++调用matlab生成的Dll动态连接库 实验平台:   matlab 7.0(R2009a)   VC++6.0思路:1. 设置matlab的编译器,使用外部的VC或者gcc等编译器. 2. 编译m文件成dll 3. 设置VC的Include路径和lib链接库的路径 4. 编写C++调用dll步骤:1.    设置matlab的编译器在命令行窗口下,输入并执行如下命令:mex

C编译: 动态连接库 (.so文件)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   在"纸上谈兵: 算法与数据结构"中,我在每一篇都会有一个C程序,用于实现算法和数据结构 (比如栈和相关的操作).在同一个程序中,还有用于测试的main()函数,结构体定义,函数原型,typedef等等. 这样的做法非常不"环保".算法的实际运用和算法的实现混在一起.如果我想要重复使用之前的源程序,必须进行许多改动,并且重新编译.最好的解决方案是实

使用Visual Studio的动态连接库创建通用数据库连接对话框

1.在VS(此处目录文件以vs2010为例)安装目录下("%Visual Studio安装目录%/Common10/IDE/Microsoft.Data.ConnectionUI.Dialog.dll")找到Microsoft.Data.ConnectionUI.dll.Microsoft.Data.ConnectionUI.Dialog.dll和汉化资源文件Microsoft.Data.ConnectionUI.Dialog.resources.dll,注意汉化资源文件需要放在zh-

c#多线程访问同一个dll(delphi写的动态连接库)接口数据冲突干扰导致dll返回数据不对

问题描述 我代码情况是这样的A按扭创了一组多线程B按钮创建了一组多线程A与B同时访问这个dll接口数据冲突干扰导致dll返回数据不对 解决方案 本帖最后由 yyy520 于 2015-12-02 14:05:54 编辑解决方案二:既然要锁住,那还创建线程干什么,直接顺序读取不就完了解决方案三:头像太性感解决方案四:引用楼主yyy520的回复: 我代码情况是这样的A按扭创了一组多线程B按钮创建了一组多线程A与B同时访问这个dll接口数据冲突干扰导致dll返回数据不对 嗯,可以理解.#1楼把多种解决