动态库的加载方式有静态加载和动态加载。动态加载有个好处就是只要接口没变,重新编译之后,调用者不用重新编译。
之前在某网站看到有个大神说c++作为一门面向对象语言,其使用便捷性远远不如C#以及java,还编写了一个自动调用动态库的过程。确实c++对象封装上面不如C#和Java,也不如他们使用便捷,但是c++的功能非常强大的,特别是其强大的指针功能(这是从C语言继承来的)。尽管指针在使用时容易造成内存问题,但我们不能否认指针功能的强大,尤其是万能指针(void*),基本上所有指针都可转化为(void*)。
c++在动态库加载处理上确实有点麻烦,下面是c++和c#调用动态库流程的比较:
c++ |
c# |
(1)、定义动态库句柄:HINSTANCE hModule; 定义函数指针接收接口地址: typedef int (WINAPI* Sendmessage)( IntPtr hWnd, int Msg, int wParam, ref lParam lparam); Sendmessage sendPtr; (2)、加载动态库:hModule = LoadLibrary("User32.dll") (3)、获取接口地址: sendPtr= (Sendmessage)GetProcAddress(hModule,"SendMessage") (4)、调用接口 (5)、释放动态库:FreeLibray(hModule) |
(1)、加载动态库: [DllImport("User32.dll", EntryPoint = "SendMess |