如何编写DLL文件(开发环境VS2005)

VS 2005 创建DLL工程,并进行调用与调试例子 VS 2005 创建DLL工程,并进行调用与调试例子   1  例子目标 在Window下,学会使用Visual Studio 2005创建简单的DLL工程,以及对DLL提供的接口进行调用与调试。   2  DLL工程 2.1 创建工程 打开VS2005,并创建工程。如图所示。          这里选择“Win32 控制台应用程序”即可。选择工程的位置,以及添加工程的 阅读详情

动态链接库

在Windows 应用程序中使用动态链接库有很多的好处。最主要的一点说是它可以使得多个应用程序共享一段代码,从而可以大幅度的降低应用程序的资源开销,同时很缩小了应用程序的最终执行代码的大小。此外,通过使用动态链接库,我们可以把一些常规的例程独立出来,有效的避免了不必要的重复开发,并且,由于应用程序使用了动态链接的方式,还可以在不需重新改写甚至编译应用程序的基础上更新应用程序的某些组件。

DLL 分三种 ,包括:非MFC DLL、静态链接到MFC的常规DLL、动态链接到MFC的常规DLL、MFC扩展DLL,

1.非MFC DLL(non-MFC DLL)内部不使用MFC,调用非MFC DLL提供的导出函数的可执行程序可以使用MFC,也可以不使用MFC。一般来说,非MFC DLL的导出函数都使用标准的C接口(standard C interface)。

2.其余三种DLL的内部都使用了MFC。顾名思义,静态链接到MFC的常规DLL(regular DLL statically linking to MFC)和动态链接到MFC的常规DLL(regular DLL dynamically linking to MFC)的区别在于一个使用的是MFC的静态链接库,而另一个使用的是MFC的DLL。这和一般的MFC应用程序的情况是很类似的。

3.MFC 扩展DLL一般用来提供派生于MFC的可重用的类,以扩展已有的MFC类库的功能。MFC扩展DLL使用MFC的动态链接版本。只有使用MFC动态链接的可执行程序(无论是EXE还是DLL)才能访问MFC扩展DLL。MFC扩展DLL的另一个有用的功能是它可以在应用程序和它所加载的MFC扩展DLL之间传递MFC和MFC派生对象的指针。在其它情况下,这样做是可能导致问题的。

如何选择所应该使用的 DLL 的类型呢? 我们可以从以下几个方面来考虑:

1.相比使用了MFC的DLL而言,非MFC DLL显得更为短小精悍。因此,如果DLL不需要使用MFC,那么使用非MFC DLL是一个很好的选择,它将显著地节省磁盘和内存空间。同时,无论应用程序是否使用了MFC,都可以调用非MFC DLL中所导出的函数。

2.如果需要创建使用了MFC的DLL,并希望MFC和非MFC应用程序都能使用所创建的DLL,那么可以选择的范围包括静态链接到MFC的常规DLL和动态链接到MFC的常规DLL。动态链接到MFC的常规DLL比较短小,因此可以节省磁盘和内存,但是,在分发动态链接到MFC的常规DLL时,必须同时分发MFC的支持DLL,如MFCx0.DLL和MSVCRT.DLL等。而使用静态链接到MFC的常规DLL则不存在这种问题。

3.如果希望在DLL中实现从MFC派生的可重用的类,或者是希望在应用程序和DLL之间传递MFC的派生对象时,必须选择MFC扩展DLL。

创建和使用动态链接库

DLL文件和EXE文件都属于可执行文件,不同的是DLL文件包括了一个导出表,导出表中给出了可以从DLL中导出的所有函数的名字。外部可执行程序只能访问包括在DLL的导出表中的函数,DLL中的其它函数是私有的,不能为外部可执行程序所访问。可以使用Visual C++提供的DUMPBIN实用程序(可以在DevStudio/VC/bin目录下找到这个工具)来查看一个DLL文件的结构。举一个例子,如果需要查看DLL文件msgbox.dll的导出表,可以在命令提示符下键入下面的命令:

   1:
 >dumpbin /exports msgbox.dll

运行结果如下:

   1:
 Microsoft (R) COFF Binary File Dumper Version 5.00.7022
   2:
  
   3:
 Copyright (C) Microsoft Corp 1992-1997. All rights reserved.
   4:
  
   5:
 Dump of file msgbox.dll
   6:
  
   7:
 File Type: DLL
   8:
  
   9:
 Section contains the following Exports for
 MSGBOX.dll
  10:
  
  11:
 0 characteristics
  12:
  
  13:
 351643C3 time date stamp Mon Mar 23 19:13:07 1998
  14:
  
  15:
 0.00 version
  16:
  
  17:
 1 ordinal base
  18:
  
  19:
 1 number of functions
  20:
  
  21:
 1 number of names
  22:
  
  23:
 ordinal hint name
  24:
  
  25:
 1 0 MsgBox (00001000)
  26:
  
  27:
 Summary
  28:
  
  29:
 7000 .data
  30:
  
  31:
 1000 .idata
  32:
  
  33:
 2000 .rdata
  34:
  
  35:
 2000 .reloc
  36:
  
  37:
 17000 .text
  38:
  

由上面的结果得知,msgbox.dll中仅包括了一个导出函数MsgBox()。

注意:

仅仅知道导出函数的名称并不足以从DLL中导出该函数。若在应用程序中使用显式链接(link explicitly),至少还应该知道导出函数的返回值的类型以及所传递给导出函数的参数的个数、顺序和类型;若使用隐含链接(link implicitly),必须有包括导出函数(或类)的定义的头文件(.H文件)和引入库(import library,.LIB文件),这些文件是由DLL的创建者所提供的。

或者用depends工具也可以,而且此工具为可视化界面,使用更方便。

从 DLL 中导出函数有两种方法:

在创建DLL时使用模块定义(module DEFinition,.DEF)文件。

在定义函数时使用关键字_declspec(dllexport)。

下面我们通过一个简单的例子来分别说明两种方法的使用。在这个例子中,我们将创建一个只包括一个函数MsgBox()的DLL,函数MsgBox()用来显示一个消息框,它和Win32 API函数MessageBox()的功能是一样,只不过在函数MsgBox()中,不需要指定消息的父窗口,而且可以缺省其它所有的参数。

(1) 使用模块定义文件

模块定义文件是一个文本文件,它包括了一系列的模块语句,这些语句用来描述DLL的各种属性,典型的,模块语句定义了DLL中所导出的函数的名称和顺序值。

在讲解模块定义文件之前,我们先创建一个Win32 Dynamic-Link Library工程。

1. 在Microsoft Developer Studio中选择File菜单下的New命令,在Projects选项卡中选择Win32 Dynamic-Link Library,并为工程取一个名字,如msgbox。单击OK后,Visual C++创建一个Win32 DLL的空白工程,必须手动的将所需要的文件添加到工程中。

2. 单击Project菜单下的Add To Project子菜单下的New命令,在Files选项卡中选择Text File,在File文本框中输入DEF文件名,如msgbox.def。

3. 双击Workspace窗口的FileView选项卡中的msgbox.def节点,在msgbox.def文件中输入下面的内容:

   1:
 LIBRARY MSGBOX
   2:
  
   3:
 EXPORTS
   4:
  
   5:
 MsgBox @1

在DEF文件中的第一条语句必须是LIBRARY语句,该语句表明该DEF文件属于一个DLL,在LIBRARY之后是DLL的名称,这个名称在链接时将放到DLL的引入库中。EXPORTS 语句下列出了DLL的所有导出函数以及它们的顺序值。函数的顺序值不是必须的,在指定导出函数的顺序值时,我们在函数名后跟上一个@符号和一个数字,该数字即导出函数的顺序值。如果在DEF中指定了顺序值,它必须不小于1,且不大于DLL中所有导出函数的数目。

注意:对于VS2005还要有以下设置,选择 工程 > 属性中的链接器,然后找到"输入"这一项. 在 "模块定义文件" 中输入 msgbox.def.

4. 下一步是向工程中添加一个头文件,它定义了DLL中的函数的返回值的类型和参数的个数、顺序和类型。

单击菜单项Project|Add To Project|New...,在Files选项卡下选择C/C++ Header File,在File文本框中指定头文件名,如msgbox.h(可以省略后缀名.h)。

在头文件中输入如下的内容:

   1:
 #include
   2:
  
   3:
 extern
 "C"
 int
 MsgBox(
   4:
  
   5:
 LPCTSTR lpText=L"虽然这个例子有一些幼稚,但它工作得非常的好!"
, // 消息框的文本
   6:
  
   7:
 LPCTSTR lpCaption=L"一个简单的例子"
,  // 消息框的标题
   8:
  
   9:
 UINT uType=MB_OK); // 消息框的样式

请注意函数定义前的关键字extern "C",这是由于我们使用了C++语言来开发DLL,为了使C语言模块能够访问该导出函数,我们应该使用C链接来代替C++链接。否则,C++编译器将使用C++的类型安全命名和调用协议,这在使用C调用该函数时就会遇上问题。在本例中并不需要考虑到这个问题,因为我们在开发DLL和应用程序时都是使用C ++,但我们仍然强烈建议使用extern "C",以保证在使用C编写的程序调用该DLL的导出函数不会遇上麻烦。

5. 下面要做的事是向工程中添加一个C++源文件,在该文件中实现函数MsgBox()。

仿照上面的过程,单击菜单项Project|Add To Project|New...,在Files选项卡下选择C++ Source File,在File文本框中指定源文件名,如msgbox.cpp。

在msgbox.cpp文件中添加如下的代码:

   1:
 #include
 "msgbox.h"
   2:
  
   3:
 int
 MsgBox(LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
   4:
 {
   5:
     return
 MessageBox(NULL,lpText,lpCaption,uType);
   6:
 }

编译该工程,在Debug目录下生成文件msgbox.lib和msgbox.dll。

(2) 使用关键字_declspec(dllexport)

从DLL中导出文件的另一种方法是在定义函数时使用_declspec(dllexport)关键字。这种方法不需要使用DEF文件。

仍使用前面的例子,在工程中删除msgbox.def文件,将msgbox.h文件修改如下:

   1:
 #include
   2:
 extern
 "C"
 _declspec(dllexport) int
 MsgBox( // 消息框的文本
   3:
     LPCTSTR lpText=L"虽然这个例子有一些幼稚,但它工作得非常的好!"
, // 消息框的标题
   4:
     LPCTSTR lpCaption=L"一个简单的例子"
, // 消息框的样式
   5:
     UINT uType=MB_OK);

msgbox.cpp文件并不需要做任何修改,重新编译该工程,在Debug目录下仍生成两个文件msgbox.lib和msgbox.dll。

使用__declspec(dllexport)从DLL中导出类的语法如下:

   1:
 class
 __declspec(dllexport) CDemoClass
   2:
 {
   3:
     ...
   4:
 }
   5:
  

注意:

如果在使用__declspec(dllexport)的同时指定了调用协议关键字,则必须将__declspec(dllexport)关键字放在调用协议关键字的左边。如:int __declspec(dllexport) __cdacl MyFunc();

如何从这两种导出函数的方法中作出选择,可以从下面的几个方面考虑:

如果需要使用导出顺序值(export ordinal value),那么应该使用DEF文件来导出函数。只在使用DEF文件导出函数才能指定导出函数的顺序值。使用顺序值的一个好处是当向DLL中添加新的函数时,只要新的导出函数的顺序值大于原有的导出函数,就没有必要重新链接使用隐含链接的应用程序。相反,如果使用__declspec (dllexport)来导出函数,如果向DLL中添加了新的函数,使用隐含链接的应用程序有可以需要重新编译和链接。

使用DEF文件来导出函数,可以创建具有NONAME属性的DLL。具有NONAME属性的DLL在导出表中仅包含了导出函数的顺序值,这种类型的DLL在包括有大量的导出函数时,其文件长度要小于通常的DLL。

使用DEF文件从C++文件导出函数,应该在定义函数时使用extern "C"或者在DEF文件中指定导出函数的decorated name。否则,由于编译器所产生的decorated name是基于特定编译器的,链接到该DLL的应用程序也必须使用创建DLL的同一版本的Visual C++来编译和链接。

由于使用__declspec(dllexport)关键字导出函数不需要编写DEF文件,因此,如果编写的DLL只供自己使用,使用__declspec(dllexport)较为简单。

链接应用程序到 DLL

同样,链接应用程序到DLL也有两种方法:隐含链接、显式链接

(1) 使用隐含链接

在使用隐含链接除了需要相应的DLL文件外,还必须具备如下的条件:一个包括导出的函数或C++类的头文件、一个输入库文件(.LIB文件)

将三个文件放入程序的目录中,在程序中的项目——属性——配置属性——链接器——输入,在附加依赖项中将LIB文件名写上(也可在文件头加入#pragma comment(lib,"msgbox.lib")),包含所创建的DLL:msgbox.dll所对应的头文件msgbox.h如下:

   1:
 extern
 "C"
 __declspec(dllimport)int
 MsgBox(
   2:
     LPCTSTR lpText=L"虽然这个例子有一些幼稚,但它工作得非常的好!"
,// 消息框的文本
   3:
     LPCTSTR lpCaption=L"一个简单的例子"
, // 消息框的标题
   4:
     UINT uType=MB_OK);  // 消息框的样式
   5:
  

需要注意的是,这个msgbox.h文件和创建DLL时所使用msgbox.h是不同的,唯一的差别在于,创建DLL时的msgbox.h中使用的是 __declspec(dllexport)关键字,而供应用程序所使用的msgbox.h中使用的是__declspec(dllimport)关键字。无论创建DLL时使用的是DEF文件还是__declspec(dllexport)关键字,均可使用__declspec(dllimport)关键字从DLL中引入函数。引入函数时也可以省略__declspec(dllimport)关键字,但是使用它可以使编译器生成效率更高的代码。

注意:

如果需要引入的是DLL中的公用数据和对象,则必须使用__declspec(dllimport)关键字。

如果DLL使用的是def文件,要删除TestDll.h文件中关键字extern "C"。

现在使用Microsoft Developer Studio创建一个Win32 Application工程,命名为tester。向工程中添加一个C++源文件,如tester.cpp。在tester.cpp文件中输入下面的代码:

   1:
 #include
 "msgbox.h"
 // 应将msgbox.h文件拷贝到工程tester的目录下。
   2:
 int
 WINAPI WinMain(HINSTANCE hInstance,
   3:
     HINSTANCE hPrevInstance,
   4:
     LPSTR lpCmdLine,
   5:
     int
 nCmdShow)
   6:
 {
   7:
     …
   8:
     return
 MsgBox();
   9:
     …
  10:
 }

在上面的代码中,MsgBox()函数的所有参数都使用了缺省值。

(2) 使用动态链接

如果只有DLL文件,只能采用动态链接的方式了。需要用到三个函数:

LoadLibrary(L"###.dll");  此处的L,是表示UNICODE,在VS2005中,对字符的处理时默认是按照UNICODE方式处理的。

GetProcAddress(hDllLib,"函数名"); 这个是用于返回所需要调用的DLL中的函数的地址。一般在此前需要声明一个与要调用的函数原型相同的函数指针,用于接收此函数返回的地址指针。

FreeLibrary(hDllLib);  因为DLL是动态加载的,在用完后一定要释放资源。

例如:

   1:
 typedef
 int
(*lpmsgbox)(LPCTSTR , LPCTSTR , UINT );
   2:
  
   3:
 HINSTANCE hDLL;
   4:
 lpmsgbox msgbox;
   5:
 hDLL=LoadLibrary(L"msgbox.dll"
);//加载动态链接库msgbox.dll文件;
   6:
 msgbox=(lpmsgbox)GetProcAddress(hDLL,"MsgBox"
);
   7:
 msgbox(L"Hello"
,L"Hello"
,MB_OK);
   8:
 FreeLibrary(hDLL);//卸载msgbox.dll文件;

在上例中使用类型定义关键字typedef,定义指向和DLL中相同的函数原型指针,然后通过LoadLibray()将DLL加载到当前的应用程序中并返回当前DLL文件的句柄,然后通过GetProcAddress()函数获取导入到应用程序中的函数指针,函数调用完毕后,使用 FreeLibrary()卸载DLL文件。在编译程序之前,首先要将DLL文件拷贝到工程所在的目录或Windows系统目录下。

使用显式链接应用程序编译时不需要使用相应的Lib文件。另外,使用GetProcAddress()函数时,可以利用 MAKEINTRESOURCE()函数直接使用DLL中函数出现的顺序号,如将GetProcAddress(hDLL,"MsgBox")改为 GetProcAddress(hDLL, MAKEINTRESOURCE(1))(函数MsgBox ()在DLL中的顺序号是1),这样调用DLL中的函数速度很快,但是要记住函数的使用序号,否则会发生错误。

最后建议大家进行隐士链接dll。

DLL VS2005使用C++制作dll文件 阅读详情

相关推荐

VS2005---MFC应用程序向Win32DLL程序转换

本次项目有两个工程,一个是VS2005工程,一个是VC6工程。对于这两个工程,先是做的MFC exe应用程序,然后客户又要求把exe转换成dll工程,因此就开始了痛苦的转换工程。本章将要记录的是VS2005工程的转换。下一章将记录的是另一个VC6工程的转化。两个IDE平台下的转换方法不能通用,不知道为什么啊! 新建立了DllMain.cpp、entpoint.cpp、API.cpp 、XX

Ronal_Lee的专栏 3381

windows下dll文件的创建详细教程

本文详细介绍了windows系统下如何通过visual studio生成dll文件,适合新手快速入门。

weixin_43354152的博客 8701

如何确保VS2005开发的exe文件在非VS2005环境中运行

Visual C++ Redistributable Packages是微软提供的一系列运行时组件,这些组件是运行使用Visual Studio开发的应用程序所必需的。在使用Visual Studio开发C++应用程序时,经常需要调用特定的库和组件。这些依赖的组件在编译后的程序中并不会直接包含,而是要求目标计算机上预先安装了相应的运行时环境。Redistributable Packages解决了这个问题,它允许开发者指定其应用程序需要哪些版本的Visual C++库,并确保这些库在目标机器上可用。

weixin_31419153的博客 658

如何从0到1编写一个dll文件

本人小白一枚,由于刚刚开始接触dll,文件编写,苦于不知道如何进行编写,再加上对工具的不熟悉,查了很久的资料,经过了好几天的摸索,才勉勉强强掌握了一点点怎么写dll文件,这里就记录一下,如何编写我们的dll文件,然后成功的链接到我们的程序中去。对于编译dll文件,有两种,一种是使用我们强大的环境,vs ,另一种就是使用我们强大的编译器gcc。这里对于这两种方式进行简单的演示。

qq_54894802的博客 2350

ICT模拟零件测试方法--电容测试

通常,小到 100 pF 的电容需要补偿,因为夹具和系统的电容(20 到 50 pF)相对于被测设备的值是显著的。软件在需要补偿的电容测试中加入 comp 选项,而在不需要补偿的电容测试中加入 nocomp 选项。在调试期间,通过向电容语句添加 pc 选项验证您的电容测试。在测试单独的电容时,从测量结果中减去学到的值,然后与测试限制进行比较以决定通过或失败。请注意,如果用于需要补偿的电容测试上的感应总线使用了单独的探针,测量将无效。在测试电容时,应注意两个方面:电容的电阻元件,以及夹具和系统本身的电容。

可可南木的博客 1217

DSSAD自动驾驶行车记录系统体系结构和应用

通过对其感知、决策、控制等模块的详细研究,以及对商业化和消费市场发展趋势的分析,为该领域的研究和实践提供有价值的参考。通过克服技术、安全与隐私、法规与政策等方面的挑战,并紧跟人工智能、云端服务、用户体验等发展趋势,DSSAD系统将更好地适应自动驾驶行业的发展,提供更安全、智能、便捷的驾驶辅助服务。DSSAD体系结构通过数据收集模块、加密链接和数据存储模块和数据读取模块等关键模块的协同作用,构建了一个强大而灵活的自动驾驶数据记录系统,为未来智能出行提供了坚实的技术基础。

一只老虎的专栏 2207

DLL教程--如何编写、调用DLL(附图说明)

该lib文件不同于<https://blog.youkuaiyun.com/weixin_43758311/article/details/133955852>中的静态库文件,此lib文件只是dll文件中导出函数的声明和定位信息,并不包含函数的实现(而第一节中的静态库文件,包含了函数的实现),因此此lib文件只是在调用对应dll库的工程编译时使用,不需要随exe发布。创建一个新的 DLL 项目时,通常会自动生成一些预编译头文件和其他文件,这些文件的作用是帮助加快编译速度和提高代码组织结构。,但是它不是预编译头文件。

m0_55621747的博客 1万+

运算放大器多谐振荡器设计实战:从施密特触发器到波形生成

本文详细介绍了运算放大器在多谐振荡器设计中的实战应用,涵盖施密特触发器的迟滞比较原理、非稳态振荡器的自激机制以及单稳态和双稳态电路的设计技巧。通过具体案例和参数计算,帮助工程师掌握波形生成与信号处理的核心技术,提升电路设计效率与稳定性。

pz89012345的博客 217

如何编写DLL文件(开发环境VS2005)

如何编写DLL文件(开发环境VS2005) 动态链接库   在Windows 应用程序中使用动态链接库有很多的好处。最主要的一点说是它可以使得多个应用程序共享一段代码,从而可以大幅度的降低应用程序的资源开销,同时很缩小了应用程序的最终执行代码的大小。此外,通过使用动态链接库,我们可以把一些常规的例程独立出来,有效的避免了不必要的重复开发,并且,由于应用程序使用了动态链接的方式,还可以在不

mjhmjhmjh123的专栏 722

手把手教你用Xilinx Ultrascale+ FPGA解串12-bit ADC的LVDS信号(附Verilog代码)

本文详细介绍了如何使用Xilinx Ultrascale+ FPGA解串12-bit ADC的LVDS信号,涵盖硬件设计、时钟域处理和数据对齐等关键技术。通过Verilog代码实例和调试技巧,帮助工程师解决高速数据采集中的核心挑战,提升系统稳定性和性能。

weixin_42522964的博客 373

手把手教你用CsvView分析大疆无人机飞行日志(附实战CTF题解)

本文详细介绍了如何使用CsvView工具分析大疆无人机飞行日志,包括环境搭建、日志提取、核心功能解析及CTF实战技巧。通过实战案例,帮助读者掌握无人机取证的关键技术,提升日志分析能力,特别适合网络安全竞赛和实际取证场景。

weixin_42652674的博客 456

如何编写DLL文件(开发环境VS2005)——转载

动态链接库在Windows 应用程序中使用动态链接库有很多的好处。最主要的一点说是它可以使得多个应用程序共享一段代码,从而可以大幅度的降低应用程序的资源开销,同时很缩小了应用程序的最终执行代码的大小。此外,通过使用动态链接库,我们可以把一些常规的例程独立出来,有效的避免了不必要的重复开发,并且,由于应用程序使用了动态链接的方式,还可以在不需重新改写甚至编译应用程序的基础上更新应用程序的某些组件

Tank_huenyifei的专栏 554

超全!!snowboy语音唤醒(树莓派4b)

通过snowboy进行树莓派的语音唤醒

crimaster1024的博客 8735

VS2005创建DLL

VS2005创建DLL 使用VS2005创建自己的动态链接库,这样就不用看到DLL文件有抵触情感了。 一、打开VS2005软件,创建DLL工程。起名ceshi1. 1)     2) 点击下一步,应用程序类型为DLL,空工程。 3) 完成,一个新的DLL工程设置完毕,接下来编辑源码 添加头文件,命名为ceshi1.h,编辑内容: #ifndef CESH

liulina603的专栏 6277

[VCS]门级仿真及SDF反标

摘要:门级仿真在STA工具普及后仍是验证的重要环节,主要用于检查SDC完备性、异步电路时序、网表完整性及为功耗分析提供波形。门级仿真分为不带时序反标的前仿和带SDF反标的后仿,后仿需加载SDF文件提供精确延时信息。VCS提供多种仿真选项控制时序检查行为,SDF反标可通过命令或系统函数实现。后仿需特别注意关闭notimingcheck选项以确保时序检查有效性,并建议检查SDF反标报告和波形验证延时一致性。

元直的博客 9790

FM收音机调试-RDA5807M

收音机调试 IC型号:RDA5807M

mangofu的博客 6164

VS2005中Lib和Dll

<br />在VS 2005中,如果要创建一个新的项目,我们通常的做法是默认项目为控制台程序,如此操作,则创建后的工程会默认包含很多Windows中的东西,而且主函数默认是从命令行输入参数,因此一般比较好的操作是选择常规,建立一个空项目。<br /> <br />上面说了点题外话,首先我们需要知道为何要使用lib和dll文件呢?之所以要使用这些文件,是为了让用户在无法得知函数的具体实现的情况下,依然可以通过使用lib和dll文件使用它们的功能。下面介绍一下VS2005中Lib和Dll文件的使用,及其功能。L

xywlpo的专栏 3965

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VS2005环境下的DLL应用

VS2005环境下的DLL应用 作者:一点一滴的Beer http://beer.cnblogs.com/     以前写过一篇题为《VC++的DLL应用(含Demo演示)》的文章,当时是刚开始接触DLL,而且所讲到的一些DLL的应用都是比较浅层次的数据传递,基本不具备很强的实用性,而且所选用的开发环境是VC6.0,这次因为做做WinCE开发的过程中需要用到这个技术,所以进行了比较深入的研究

tanghuashijia_的专栏 715

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VS2005 使用/导入lib 、 dll库

1、编译库的时候,在project option--C/C++ -- Code generation 中的Runtime library中,注意选择链接库的类型。修改原则主要是保持一致性。 例如工程使用MTD 有关 C 运行时库以及使用 /clr(公共语言运行库编译)进行编译时要使用哪些库的更多信息,请参见 C Run-Time Libraries。 传递给链接器的给定调用的所有模块都必须使

pacewalker的专栏 8060

VS中def文件对于生成dll和lib文件的作用

VS2005使用DEF文件来生成DLL与LibVS2005使用DEF文件来生成DLL与Lib时,与VC6的设置是不一样 的,VC6工程中,只要有DEF文件并将其添加到工程中,VC6就可以自动地生成DLL与其相应的Lib文件了。但是VS2005不一样,需要指定DEF文件,方法如下:例如:把 sqlite3.def 添加到工程中. 选择 工程 > 属性中的链接器,然后找到"输入"这一项

caomiao2006的专栏 7504

关于VS2005程序发布的问题

关于VS2005程序发布的问题:其实就是程序能否找到运行时所需要的DLL的问题。注意VS2003与VS2005的不同:VS2003程序产生时可以选择产生manifest文件也可以选择不产生,但VS2005必须产生。manifest文件可以是内嵌到程序的二进制资源文件中,也可以只产生一个外部的.manifest文件。因为VS2005生成的程序运行时需要根据它的manifest文件来获取程序运行时

105694832的专栏 7254

VS2005,VS2008,VS2010将ASP.NET网站编译成一个DLL文件

VS在发布网站时,bin目录里为所有cs生成的dll文件每次都是随机命名的,如:App_Web_xxxxxxxx.dll(xxxxxxx是8个小写的字母和数字组成的字符串,随机的),这样对更新 Live 站点很不方便,因为动态库名变了,涉及到每一个 aspx 文件每次都重新更改了对库的引用声明:         即使有一个 cs 的小改动,由于生成的动态库名称不一样,造成所有的aspx文

fengxinzi_jing的专栏 1万+
上一篇: 【转】用VC6.0创建和调用win32 dll
下一篇: windows计算程序运行时间
cometdlut
博客等级 码龄19年 11粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值