VC6调用VS2008的动态库
来源:互联网 发布:装修设计什么软件 编辑:程序博客网 时间:2024/06/02 00:37
最近在研究人脸识别,打算用PCA(主原分析)对图像数据进行降维后用神经网络训练的方法实现,在网上找了一下PCA的C++算法,发现很难用,而且速度奇慢,后来知道opencv上有实现PCA算法的函数,于是下载了一个2.0版,发现原来已经不支持VC6了,由于之前的代码都是在VC6下实现的,现在要移植也不太可能,无奈之下,用了1.0,但是却不知为什么只要维数大于数据量时就出错,真的要放弃?最后就孤注一掷,在VS2008下作一个封装2.0版下PCA类相关函数的库,再在VC6上链接。
首先做成了静态库,居然链接不成功,看来VC6与VS2008的静态库还是不兼容,我想如果做动态库链接时应该还是会有这个问题啊,就想放弃了,不过经过高人指点,可以直接用LoadLibrary的方法调用动态库的函数啊。好,这个方法可以完全避开编译器和链接器,是最后的机会了。
首先声明一个struct
struct PCA
{void* pca;}
这个pca就是指向opencv2.0中PCA对象的指针。
接着声明创建和释放该对象的函数。
最后再声明其它PCA类方法的函数,如Project。
extern "C" void Project(PCA* pca, float* vec, int veclen, float*& res, int reslen);
这里记着最好要加上extern "C",好让编译器用C函数的方法对该函数进行编译,这样在dll库的函数名就会是Project,否则用C++编译的就会显示加上参数的一串很长的函数名,这时就需要VC6的一个工具Depends打开dll文件才能看到正确的函数名。
在VS2008下写好了动态库,就要在VC6下调用了,这个网上就有很多资料了,大概步骤如下:
// 声明这个函数指针
typedef bool (__cdecl *ProjectPtr)(CPCA*, const data_t*, int, data_t*&, int);
// 加载这个动态库
HMODULE hModule = LoadLibrary("pcalib.dll");
// 取得这个函数的地址
ProjectPtr projectPtr = (ProjectPtr)GetProcAddress(hModule, "Project");
// 创建对象
PCA* pca = (createPCAPtr)(orl_input, TrainNum, InputUnits, MaxComponents);
// 调用这个函数
(projectPtr)(pca, orl_input[i], InputUnits, train_input[i], MaxComponents);
该方法的确行,而且opencv中的PCA算法速度超快,opevcv果然强大,里面还有很多矩阵运算等算法,一点也不比Matlab差。
- VC6调用VS2008的动态库
- C# VC6调用VC6的动态库DLL
- VS2008 动态库的生成与调用
- Qt中调用VC6生成的动态库DLL文件
- VC6的动态库工程dll,转成VS2008下可以使用
- vs2008调用vc6.0开发的dll问题
- QT5.3.1 + mingw4.8 调用vs2008的动态库
- 用vs2008写了一个动态库,其中有申请内存,用vc6.0写了一个exe调用动态库,并释放dll申请的内存:dbgheap.c Line:1011
- VC6到VS2008的变化
- VC6下非托管程序调用C#编写的动态库
- vs2008 中,在编译Tcl扩展库时调用其他的动态库 (动态库调用动态库)
- 在VS2008,VS2010,VC6.0MFC中嵌入MATLAB的command window,调用MATLAB引擎
- 调用c++动态库函数vs2008
- vc6静态库的生成和调用
- vc6静态库的生成和调用
- vc6静态库的生成和调用
- 使用VS2008创建和调用动态链接库
- VS2008创建和调用DLL动态链接库
- ZT - Simple JavaScript Object Reflection API (.NET Style)
- 五大开源游戏引擎介绍(转)
- 开通一个csdn的blog
- 第一次
- 金岩石精彩语录
- VC6调用VS2008的动态库
- Oracle中 Alter Table 语句的使用
- 什么是轨对轨
- 某基于DEDECMS5.5网站的安全检测初步报告
- type: class:com.opensymphony.xwork2.ObjectFactory
- java.lang.IllegalAccessError: tried to access method net.sf.ehcache.CacheManager
- XML介绍
- [转] 程序员的笑话
- 查询处理器未能用优化程序生成查询计划,因为查询无法同时更新聚集键和 text、ntex