
动态库
tobealv
这个作者很懒,什么都没留下…
展开
-
如何增加动态库引出函数
在.def文件中增加即可.原创 2010-12-21 15:51:00 · 467 阅读 · 0 评论 -
MFC动态库内部产生对话框不显示的问题
<br />外部程序调用MFC动态库时,由动态库产生一个对话框,但是不显示...<br />在doModal之前加上<br /> AFX_MANAGE_STATE(AfxGetStaticModuleState());<br /> <br /> <br />下面是建动态库时vc自动写的一个提示<br />//<br />// Note!<br />//<br />// If this DLL is dynamically linked against the MFC<b原创 2011-03-25 16:07:00 · 1721 阅读 · 0 评论 -
extern, extern "C",__stdcall
<br />C编译器把人写的函数名当成函数名<br />C++编译器把人写的函数名做了改动之后当成函数名<br />为了让c++编译器不改动函数名,就加上extern "C" <br /><br />假设dll导出一个int add(int a, int b);<br /><br />一. 采用函数声明导出的方式<br />(一) extern "C"<br /><br />1.导出函数不加extern "C"。<br />(1) 动态调用:<br />编译器生成的实际导出函原创 2011-03-26 17:54:00 · 903 阅读 · 0 评论 -
当改变了动态库的生成名字时,编译出警告Linking... Creating library ARMV4IRel/my.lib and object ARMV4IRel/my.exp my.exp : warning LNK4070: /OUT:RE
<br />Linking...<br /> Creating library ARMV4IRel/my.lib and object ARMV4IRel/my.exp<br />my.exp : warning LNK4070: /OUT:RES_EN.dll directive in .EXP differs from output filename 'ARMV4IRel/my.dll'; ignoring directive<br /> <br />.EXP 中的 /OUT:filenam原创 2011-03-28 11:35:00 · 1235 阅读 · 0 评论 -
动态库与UNICODE
本篇文章解决如下问题:动态库的导出函数带有字符参数,同时,还能支持“调用者在UNICODE和非UNICODE”下都可以使用。1. 动态库(1) 动态库的导出函数在动态库编译的时候,其参数TCHAR就已经根据"动态库自身"的UNICODE设置情况被解析为了char还是w原创 2011-09-16 21:44:18 · 1029 阅读 · 0 评论 -
unresolved external symbol "__declspec(dllimport) int __stdcall
静态使用动态库时,客户程序在编译的时候要链接lib找.h中定义的导入函数,如果在lib中找不到则报标题所述的错误,遇到这种问题首先要查看是不是包含了.lib文件原创 2011-09-17 11:14:08 · 1134 阅读 · 0 评论 -
DLL导出变量/对象/类
一、DLL的不同类型 使用MFC可以生成两种类型的DLL:MFC扩展DLL和常规DLL。常规DLL有可以分为动态连接和静态连接。Visual C++还可以生成WIN32 DLL,但不是这里讨论的主要对象。1、MFC扩展DLL 每个DLL都有某种类型的接口:变量、指针、函数、客户程序访问的类。它们的作用是让客户程序使用DLL,MFC扩展DLL可以有C++的转载 2012-04-27 17:17:42 · 1382 阅读 · 0 评论 -
vc的相对目录
<br />1.用于打开的文件应该放在工程目录下,而不是debug或release目录下<br />2.对于动态库使用的文件,也应该放在本工程目录下,而不是跟动态库放在一个目录下,因为动态库被加载后是运行在本工程的进程里原创 2010-12-26 15:26:00 · 663 阅读 · 0 评论 -
vc++ External dependencies;静态lib使用dll
External Dependencies是说你没有把这个文件加入到这个工程中,但是需要这个文件的支持。当然有时是误操作。比如你从工程里面删除了abc.h但是在其中一个文件中用#include包含了这个文件,那么,abc.h就会进入External Dependencie原创 2011-05-25 12:20:00 · 989 阅读 · 0 评论 -
lib和dll
vc建立动态库工程的时候,会产生lib和dll,lib中只有接口VC建立静态库工程 的时候,只会产生lib,这个lib既有接口又有实现原创 2011-03-08 16:34:00 · 750 阅读 · 0 评论 -
extern "C" 与 __stdcall使用
extern "C" __declspec (dllexport) char* __stdcall SQLFetch(const char* fieldname);C語言中extern cc与c++程序连接问题 它们之间的连接问题主要是因为c c++编绎器对函数名译码的方式不能所引起的,考虑下面两个函数 /* c*/ int strlen(char* string) { ... } //c++ int strlen(char* string) { ... }原创 2011-03-25 16:43:00 · 950 阅读 · 0 评论 -
输入法编程总结
1.操作系统使用ImeProcessKey查看你输入法有没有对当前按键做处理(写ImeProcessKey时处理返回true,没处理返回FALSE),如果返回true,则操作系统会调用ImeToAsciiEx,所以真正对按键的处理可以放在ImeToAsciiiEx中2.操作系统调用ImeToAsciiEx提供一块内存,IME在这个函数中产生消息,消息便可以放在这个内存中3.ImeProcessKey,操作系统首先把按键信息发给本IME,IME判断自己是否要处理该按键,如处理则作出相应处理并返回TRUE,否则原创 2011-01-11 11:29:00 · 1589 阅读 · 0 评论 -
HMODULE 到底定义的是什么
定义是这样的:typedef HINSTANCE HMODULE;<br /><br />再看看HINSTANCE<br />typedef HANDLE HINSTANCE;<br /><br />那HANDLE又是什么呢?<br />typedef PVOID HANDLE;<br /><br />PVOID又是什么呢?<br />typedef void *PVOID;<br /><br />现在明白了吧》<br />其实这些都可以称为句柄,为了表述的方便,所以对于不同转载 2010-12-25 21:14:00 · 2204 阅读 · 0 评论 -
模块定义(.def)文件说明
<br />MSDN中的名词解释<br />模块定义 (.def) 文件为链接器提供有关被链接程序的导出、属性及其他方面的信息。生成 DLL 时,.def 文件最有用。由于存在可代替模块定义语句使用的链接器选项,通常不需要 .def 文件。也可以将 __declspec(dllexport) 用作指定导出函数的手段。在链接器阶段可以使用 /DEF(指定模块定义文件)链接器选项调用 .def 文件。<br />如果生成的 .exe 文件没有导出,使用 .def 文件将使输出文件较大并降低加转载 2010-12-25 23:12:00 · 1263 阅读 · 0 评论 -
动态库学习积累
1.建立win32DLL。若选择 An empty DLL project ,则向导不生成任何文件若选择 An simple DLL project ,则向导stdafx.h stdafx.cpp文件(stdafx并不是MFC专用的)2.win32的 DLLMain 会被声明为 APIENTRY3.MFC类型的动态库,建立时选项Regular dll with mfc statically linked,意思并不是说本动态库被使用的时候被静态链接。而是说这个动态库,它在使用MFC的时候,静态链接MFC。A原创 2010-12-25 20:08:00 · 399 阅读 · 0 评论 -
COM字符转换函数编译问题
<br />unresolved external symbol "void __stdcall _com_issue_error(long)" (?_com_issue_error@@YGXJ@Z)<br />unresolved external symbol "char * __stdcall _com_util::ConvertBSTRToString(unsigned short *)" (?ConvertBSTRToString@_com_util@@YGPADPAG@Z)<br /转载 2010-12-25 20:12:00 · 465 阅读 · 0 评论 -
关于动态库的几个关键函数
1.DllGetClassObject 用于创建类厂对象2.类厂对象定义个CreateInstance3.CoCreateInstance,客户程序调用此函数,此函数内部调用DllGetClassObject创建类厂对象,然后调用类厂的CreateInstance创建com对象4.DllRegisterServer 用于注册com组件到注册表,如果com组件没有定义此函数或没有引出此函数,使用RegSvr32注册这个组件时会出现找不到入口点5.DllUnregisterServer反注册原创 2010-12-30 14:38:00 · 569 阅读 · 0 评论 -
用VC资源动态链接库解决国际化问题
<br />http://www.docin.com/p-6807347.html原创 2010-11-07 17:07:00 · 476 阅读 · 0 评论 -
如何理解DLL中的extern "C"
在DLL的设计中中,,如果使用C++开发,通常在导出函数的定义中使用extern "C",为什么呢?因为当用户使用"运行时动态链接"的时候将使用GetProcAddress函数得到导出函数的地址,该函数是通过导出函数的函数名定位导出函数的,而C++编译器因为函数重载的原因会对开发者定义的函数名进行修饰,导致导出表中的函数名通常不是开发者使用的函数名,比如函数 ExportedFn可能被修饰成??ExportedFn@QAEX。所以使用extern "C"通知编译器按照C的格式进行编译,而不是使用C转载 2010-11-08 08:52:00 · 493 阅读 · 0 评论 -
GetModuleHandle函数
<br />当一个文件被映射到调用进程的地址空间时,GetModuleHandle函数得到其中某一模块的句柄。 <br />使用GetModuleHandle函数格式:<br />HMODULE GetModuleHandle( LPCTSTR lpModuleName); <br /><br />参数 lpModuleName:<br /><br />[in]用指针指向一个包含模块名以NULL字符结尾的串,模块是.dll或.exe文件。如果文件扩展名省略,则增加默认的扩展名.dll。转载 2010-11-08 08:54:00 · 4256 阅读 · 0 评论 -
动态调用动态库的方法
<br />假定动态库提供一个引出函数为int Func(int n);<br /> <br /> <br />extern "C" typedef int (STDCALL *pFunc)(int n);//引进函数,并定义为函数指针<br /> <br />HMODULE hModule = GetModuleHandle("*.dll");//检查动态库是否已经加载<br /> <br />if(hModule == NULL)<br />{<br /> hModule = LoadLibra原创 2010-11-11 17:28:00 · 495 阅读 · 0 评论 -
DLL文件名
应用程序使用.lib文件的方式使用dll时,.lib文件中有个“ARCHIVE MEMBER HEADER”指定了其对应dll文件的名字,默认情况下,这个名字来自于.def文件中的library,但有时候我们会更改生成的dll的名字,为了.lib和dll对应起来,需要注释掉.def中的library这句话。原创 2014-03-31 12:25:22 · 857 阅读 · 0 评论