
Qt中,怎么链接写好的C++功能实现
你斟酌着看:
如果的计算功能是以一个文件写好了,A.cpp吧!在你的Qt工程中添加文件A.cpp,在用到此cpp中算法的任何.cpp文件中,用到那个函数就在文件的前面声明此函数,接下来就直接调用函数,链接的时候会自己链接到指定的函数的。(全局函数的方法)
你的界面肯定有界面类,在此类中添加成员函数,将你的算法当成成员函数封装进来,如果你算法复杂,此方法有点麻烦,不难。(成员函数的方法)
将你的这些算法函数全部导出为动态库,在用到算法的地方导入要用到的动态库就行了,此方法一劳永逸,而且显示你水平。(动态库方法)
应该还有其他的,水平有限,暂时就这么多了。
第三种好,请问要怎么做呢
你先百度一下C++动态库的创建与使用,这不是我在这里三言两语就能让你会的。
这是我用vc6.0做的demo,你再对照这看的理解与实践,希望你有所收获。
另外一种调用:
1)定义函数指针类型
2)加载动态库(使动态库程序运行)
HMODULE LoadLibrary(
LPCTSTR lpFileName
// 动态库的名称或全路径
);//返回动态库的实例句柄(HINSTANCE)。
如果dll文件与.exe文件在同一路径下,只需要写动态库名称,不在同一路径下,则需写带盘符的全路径
3)获取函数地址
FARPROC GetProcAddress(
HMODULE hModule,
// 动态库实例句柄
LPCSTR lpProcName
// 函数名称
);//执行成功,返回函数地址。
4)使用函数
5)卸载动态库
BOOL FreeLibrary(
HMODULE hLibModule
// 动态库实例句柄
);
例子:假设你想调int call1 ( int *response )
typedef int (*DLL_CALL)(int* );//这是将函数指针类型定义出来,在头文件中的类声明前加上
2.在你调用LoadLibrary后会返回一个句柄hDll,想调用函数的时候
DLL_CALL myCall1 = (DLL_CALL) GetProcAddress( hDll, "call1" );
myCall1(/*内面填写你要传的参数*/);
现在就将call1函数调用了。
3.FreeLibrary(hDll);
配合网上的详细讲解,一步步实践,这是很重要的一个知识点,我可能讲的不是那么好,毕竟我不专业。
2013-09-22