
动态连接库的创建步骤:
一、创建Non-MFC DLL动态链接库
1、打开File —> New —> Project选项,选择Win32 Dynamic-Link Library —>sample project—>工程名:DllDemo
2、新建一个h文件DllDemoh
以下是引用片段:
#ifdefDllDemo_EXPORTS
#defineDllAPI__declspec(dllexport)
#else
#defineDllAPI__declspec(dllimport)
extern"C"//原样编译
{
DllAPIint__stdcallMax(inta,intb);//__stdcall使非C/C++语言内能够调用API
}
#endif
3、在DllDemocpp文件中导入DllDemoh文件,并实现Max(int,int)函数,以下是引用片段:
#include"DllDemoh"
DllAPIint__stdcallMax(inta,intb)
{
if(a==b)
returnNULL;
elseif(a>b)
returna;
else
returnb;
}
4、编译程序生成动态连接库
二、用def文件创建动态连接库DllDemodll。
1、删除DllDemo工程中的DllDemoh文件。
2、在DllDemocpp文件头,删除 #include DllDemoh语句。
3、向该工程中加入一个文本文件,命名为DllDemodef并写入如下语句:
LIBRARY MyDll
EXPORTS
Max@1
4、编译程序生成动态连接库。
动态链接的调用步骤:
一、隐式调用
1、 建立DllCnslTest工程
2、 将文件DllDemodll、DllDemolib拷贝到DllCnslTest工程所在的目录
3、 在DllCnslTesth中添加如下语句:
以下是引用片段:
#defineDllAPI__declspec(dllimport)
#pragmacomment(lib,"DllDemolib")//在编辑器link时,链接到DllDemolib文件
extern"C"
{
DllAPIint__stdcallMax(inta,intb);
}
4、在DllCnslTestcpp文件中添加如下语句,以下是引用片段:
#include"DllCnslTesth"//或者#include"DllDemoh"
voidmain()
{
intvalue;
value=Max(2,9);
printf("TheMaxvalueis%d
",value);
}
5、编译并生成应用程序DllCnslTestexe
二、显式调用
1、 建立DllWinTest工程
2、 将文件DllDemodll拷贝到DllWinTest工程所在的目录或Windows系统目录下。
3、 用vc/bin下的Dumpbinexe的小程序,查看DLL文件(DllDemodll)中的函数结构。
4、 使用类型定义关键字typedef,定义指向和DLL中相同的函数原型指针。
例:
以下是引用片段:
typedefint(lpMax)(inta,intb);//此语句可以放在h文件中
5、 通过LoadLibray()将DLL加载到当前的应用程序中并返回当前DLL文件的句柄。
例:
以下是引用片段:
HINSTANCEhDll;//声明一个Dll实例文件句柄
hDll=LoadLibrary("DllDemodll");//导入DllDemodll动态连接库
6、 通过GetProcAddress()函数获取导入到应用程序中的函数指针。
例:
以下是引用片段:
lpMaxMax;
Max=(lpMax)GetProcAddress(hDLL,"Max");
intvalue;
value=Max(2,9);
printf("TheMaxvalueis%d",value);
7、 函数调用完毕后,使用FreeLibrary()卸载DLL文件。
FreeLibrary(hDll);
8、 编译并生成应用程序DllWinTestexe
通常都知道在jsp中include有两种形式,分别是 < %@ include file=” ”%> < jsp:include page=” ” flush=”true”/> 前者是指令元素、后者是行为元素。具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题。下面一起来看看吧。 通常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏)都相同的时候,我们就可以考虑用include。具体在哪些时候用< %@ include file=” ”%>,哪些时候用< jsp:include page=” ” flush=”true”/>这种形式。首先要明白的是它们之间的区别。只有了解了它们用法的不同才理解该在何时去用以及如何选择。 < %@ include file=” ”%>,jsp的include指令元素读入指定页面的内容。并把这些内容和原来的页面融合到一起。(这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进行的。 这里对翻译阶段进行一下说明:我们知道,jsp页面不能原封不动地被传送给浏览器,所有的jsp元素都必须首先由服务器进行处理。这是通过将jsp页面转达化成servlet,然后执行这个servlet来完成的。服务器需要一个jsp容器来处理jsp页面。jsp容器通常以servlet的形式来实现,这个servlet经过配置,可以处理对jsp页面的所有请求。 Jsp容器负责将jsp页面转化成servlet(称为jsp页面实现类JSP Page implementation class),并编译这个servlet。这两步就构成了翻译阶段 由此我们就会知道:jsp页面是把include指令元素所指定的页面的实际内容(也就是代码段)加入到引入它的jsp页面中,合成一个文件后被jsp容器将它转化成servlet。可以看到这时会产生一个临时class文件和一个java文件。下面举个例子。 服务器用tomcat,引入页面的jsp文件叫testjsp。被引入的页面叫datejsp这个jsp文件里存放的是一个有关时间的jsp代码,当前的上下文根设为test //======datejsp的源文件=====// <%@ page language=”java” contentType="text/html;charset=gb2312"%> <% javautilDate date=new javautilDate(); String date_cn =""; String dateStr = ""; switch(dategetDay()) { case 0:date_cn ="日"; break; case 1:date_cn ="一"; break; case 2:date_cn ="二"; break; case 3:date_cn ="三"; break; case 4:date_cn ="四"; break; case 5:date_cn ="五"; break; case 6:date_cn ="六"; break; } dateStr = (1900+dategetYear())+"年"+(dategetMonth()+1)+"月"+dategetDate()+ "日(星期" + date_cn + ")"; %> documentwrite("<%=dateStr%>"); //======以下是testjsp的源文件=============// <%@ page language=”java” contentType=”text/html;charset=gb2312”%> <html> <head> <title>include的两种用法</title> <jsp:include page=”datejsp” flush=”true”/> <%--@ include file=”datejsp” %--> //我们在这里用include的两种不同形式来引入datejsp这个文件 <head> <body> <table><tr><td> 有关jsp中include的两种用法敬请关注。 </td></tr></table> </body> </html> 在testjsp 文件中,我们只输出了一行文本“ 有关jsp中include的两种用法敬请关注。”,现在让我们先用这种形式引入datejsp这个文件。你想会出现什么问题了吗?此时出现了错误提示: >
~value 相当于对value的值取反
C语言的设计具备了汇编语言的运算能力,它支持全部的位 *** 作符。位 *** 作符是对字节或字中的位进行测试、置位或移位处理,在对微处理器的编程中,特别适合对寄存器、I/O端口进行 *** 作。
6种伟 *** 作符:
(1) & :按位“与”——仅当两个 *** 作数为1时,结果为1,否则为0。如:1000 1000 & 1000 0001 = 1000 0000;
(2) | :按位“或”——仅当两个 *** 作数为0时,结果为0,否则为1。如:1000 1000 | 1000 0001 = 1000 1001;
(3) ^:按位“异或”——仅当两个 *** 作数不同时,相应的输出结果才为1,否则为0。
如:1000 1000 ^ 1000 0001 = 0000 1001 ;
(4) ~ :“取反”——把1置为0,0置为1。如:~1000 1000 = 0111 0111;
(5) <<: “左移”——将变量的各位按要求向左移动若干位。如:0000 1000 <<3 = 0100 0000;
(6) >>: “右移”——将变量的各位按要求向右移动若干位。如:0000 1000>>3=0000 0001;
以上就是关于c/c++语言中无法引用value.h库函数全部的内容,包括:c/c++语言中无法引用value.h库函数、JSP中include指令和include动作的区别、C语言printf中的~value是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)