我想在vs2005下些C++的.dll文件可是生成不了 不知道怎么写了?请高人指点!
// mydll.h 头文件代码
#ifdef mydll_api
#else
#define mydll_api _declspec(dllimport)
#endif
mydll_api void DWT(IplImage *pImage, int nLayer);
mydll_api void IDWT(IplImage *pImage, int nLayer);
// Wavelet.cpp 源文件代码
#define mydll_api _declspec(dllexport)
#include "MyDll.h"
#include "cv.h"
#include "highgui.h"
// 二维离散小波变换(单通道浮点图像)
void DWT(IplImage *pImage, int nLayer)
{
// 执行条件
if (pImage)
{
if (pImage->nChannels == 1 &&
pImage->depth == IPL_DEPTH_32F &&
((pImage->width >> nLayer) << nLayer) == pImage->width &&
((pImage->height >> nLayer) << nLayer) == pImage->height)
{
int i, x, y, n;
float fValue = 0;
float fRadius = sqrt(2.0f);
int nWidth = pImage->width;
int nHeight = pImage->height;
int nHalfW = nWidth / 2;
int nHalfH = nHeight / 2;
float **pData = new float*[pImage->height];
float *pRow = new float[pImage->width];
float *pColumn = new float[pImage->height];
for (i = 0; i < pImage->height; i++)
{
pData[i] = (float*) (pImage->imageData + pImage->widthStep * i);
}
// 多层小波变换
for (n = 0; n < nLayer; n++, nWidth /= 2, nHeight /= 2, nHalfW /= 2, nHalfH /= 2)
{
// 水平变换
for (y = 0; y < nHeight; y++)
{
// 奇偶分离
memcpy(pRow, pData[y], sizeof(float) * nWidth);
for (i = 0; i < nHalfW; i++)
{
x = i * 2;
pData[y][i] = pRow[x];
pData[y][nHalfW + i] = pRow[x + 1];
}
// 提升小波变换
for (i = 0; i < nHalfW - 1; i++)
{
fValue = (pData[y][i] + pData[y][i + 1]) / 2;
pData[y][nHalfW + i] -= fValue;
}
fValue = (pData[y][nHalfW - 1] + pData[y][nHalfW - 2]) / 2;
pData[y][nWidth - 1] -= fValue;
fValue = (pData[y][nHalfW] + pData[y][nHalfW + 1]) / 4;
pData[y][0] += fValue;
for (i = 1; i < nHalfW; i++)
{
fValue = (pData[y][nHalfW + i] + pData[y][nHalfW + i - 1]) / 4;
pData[y][i] += fValue;
}
// 频带系数
for (i = 0; i < nHalfW; i++)
{
pData[y][i] *= fRadius;
pData[y][nHalfW + i] /= fRadius;
}
}
// 垂直变换
for (x = 0; x < nWidth; x++)
{
// 奇偶分离
for (i = 0; i < nHalfH; i++)
{
y = i * 2;
pColumn[i] = pData[y][x];
pColumn[nHalfH + i] = pData[y + 1][x];
}
for (i = 0; i < nHeight; i++)
{
pData[i][x] = pColumn[i];
}
// 提升小波变换
for (i = 0; i < nHalfH - 1; i++)
{
fValue = (pData[i][x] + pData[i + 1][x]) / 2;
pData[nHalfH + i][x] -= fValue;
}
fValue = (pData[nHalfH - 1][x] + pData[nHalfH - 2][x]) / 2;
pData[nHeight - 1][x] -= fValue;
fValue = (pData[nHalfH][x] + pData[nHalfH + 1][x]) / 4;
pData[0][x] += fValue;
for (i = 1; i < nHalfH; i++)
{
fValue = (pData[nHalfH + i][x] + pData[nHalfH + i - 1][x]) / 4;
pData[i][x] += fValue;
}
// 频带系数
for (i = 0; i < nHalfH; i++)
{
pData[i][x] *= fRadius;
pData[nHalfH + i][x] /= fRadius;
}
}
}
delete[] pData;
delete[] pRow;
delete[] pColumn;
}
}
}
// 二维离散小波恢复(单通道浮点图像)
void IDWT(IplImage *pImage, int nLayer)
{
// 执行条件
if (pImage)
{
if (pImage->nChannels == 1 &&
pImage->depth == IPL_DEPTH_32F &&
((pImage->width >> nLayer) << nLayer) == pImage->width &&
((pImage->height >> nLayer) << nLayer) == pImage->height)
{
int i, x, y, n;
float fValue = 0;
float fRadius = sqrt(2.0f);
int nWidth = pImage->width >> (nLayer - 1);
int nHeight = pImage->height >> (nLayer - 1);
int nHalfW = nWidth / 2;
int nHalfH = nHeight / 2;
float **pData = new float*[pImage->height];
float *pRow = new float[pImage->width];
float *pColumn = new float[pImage->height];
for (i = 0; i < pImage->height; i++)
{
pData[i] = (float*) (pImage->imageData + pImage->widthStep * i);
}
// 多层小波恢复
for (n = 0; n < nLayer; n++, nWidth *= 2, nHeight *= 2, nHalfW *= 2, nHalfH *= 2)
{
// 垂直恢复
for (x = 0; x < nWidth; x++)
{
// 频带系数
for (i = 0; i < nHalfH; i++)
{
pData[i][x] /= fRadius;
pData[nHalfH + i][x] *= fRadius;
}
// 提升小波恢复
fValue = (pData[nHalfH][x] + pData[nHalfH + 1][x]) / 4;
pData[0][x] -= fValue;
for (i = 1; i < nHalfH; i++)
{
fValue = (pData[nHalfH + i][x] + pData[nHalfH + i - 1][x]) / 4;
pData[i][x] -= fValue;
}
for (i = 0; i < nHalfH - 1; i++)
{
fValue = (pData[i][x] + pData[i + 1][x]) / 2;
pData[nHalfH + i][x] += fValue;
}
fValue = (pData[nHalfH - 1][x] + pData[nHalfH - 2][x]) / 2;
pData[nHeight - 1][x] += fValue;
// 奇偶合并
for (i = 0; i < nHalfH; i++)
{
y = i * 2;
pColumn[y] = pData[i][x];
pColumn[y + 1] = pData[nHalfH + i][x];
}
for (i = 0; i < nHeight; i++)
{
pData[i][x] = pColumn[i];
}
}
// 水平恢复
for (y = 0; y < nHeight; y++)
{
// 频带系数
for (i = 0; i < nHalfW; i++)
{
pData[y][i] /= fRadius;
pData[y][nHalfW + i] *= fRadius;
}
// 提升小波恢复
fValue = (pData[y][nHalfW] + pData[y][nHalfW + 1]) / 4;
pData[y][0] -= fValue;
for (i = 1; i < nHalfW; i++)
{
fValue = (pData[y][nHalfW + i] + pData[y][nHalfW + i - 1]) / 4;
pData[y][i] -= fValue;
}
for (i = 0; i < nHalfW - 1; i++)
{
fValue = (pData[y][i] + pData[y][i + 1]) / 2;
pData[y][nHalfW + i] += fValue;
}
fValue = (pData[y][nHalfW - 1] + pData[y][nHalfW - 2]) / 2;
pData[y][nWidth - 1] += fValue;
// 奇偶合并
for (i = 0; i < nHalfW; i++)
{
x = i * 2;
pRow[x] = pData[y][i];
pRow[x + 1] = pData[y][nHalfW + i];
}
memcpy(pData[y], pRow, sizeof(float) * nWidth);
}
}
delete[] pData;
delete[] pRow;
delete[] pColumn;
}
}
}
提示错误:错误 1 error C2065: 'IplImage' : undeclared identifier e:\my documents\vs 2005\visual studio 2005\my documents\vs c++.net\c_dwt-idwt_dll\c_dwt-idwt_dll\mydll.h 6
错误 2 error C2065: 'pImage' : undeclared identifier e:\my documents\vs 2005\visual studio 2005\my documents\vs c++.net\c_dwt-idwt_dll\c_dwt-idwt_dll\mydll.h 6
错误 3 error C2062: type 'int' unexpected e:\my documents\vs 2005\visual studio 2005\my documents\vs c++.net\c_dwt-idwt_dll\c_dwt-idwt_dll\mydll.h 6
错误 4 error C2062: type 'int' unexpected e:\my documents\vs 2005\visual studio 2005\my documents\vs c++.net\c_dwt-idwt_dll\c_dwt-idwt_dll\mydll.h 7
错误 5 error C2065: 'IplImage' : undeclared identifier e:\my documents\vs 2005\visual studio 2005\my documents\vs c++.net\c_dwt-idwt_dll\c_dwt-idwt_dll\mydll.h 6
错误 6 error C2065: 'pImage' : undeclared identifier e:\my documents\vs 2005\visual studio 2005\my documents\vs c++.net\c_dwt-idwt_dll\c_dwt-idwt_dll\mydll.h 6
错误 7 error C2062: type 'int' unexpected e:\my documents\vs 2005\visual studio 2005\my documents\vs c++.net\c_dwt-idwt_dll\c_dwt-idwt_dll\mydll.h 6
错误 8 error C2062: type 'int' unexpected e:\my documents\vs 2005\visual studio 2005\my documents\vs c++.net\c_dwt-idwt_dll\c_dwt-idwt_dll\mydll.h 7
错误 9 error C2378: 'IplImage' : redefinition; symbol cannot be overloaded with a typedef d:\program files\opencv\cxcore\include\cxtypes.h 393
错误 10 error C2143: syntax error : missing ';' before '*' d:\program files\opencv\cxcore\include\cxcore.h 97
错误 11 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int d:\program files\opencv\cxcore\include\cxcore.h 97
错误 12 error C2371: 'IplImage' : redefinition; different basic types d:\program files\opencv\cxcore\include\cxcore.h 97
错误 13 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int d:\program files\opencv\cxcore\include\cxcore.h 97
错误 14 error C2143: syntax error : missing ';' before '*' d:\program files\opencv\cxcore\include\cxcore.h 100
错误 15 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int d:\program files\opencv\cxcore\include\cxcore.h 100
错误 16 error C2371: 'IplImage' : redefinition; different basic types d:\program files\opencv\cxcore\include\cxcore.h 100
错误 17 error C2065: 'image' : undeclared identifier d:\program files\opencv\cxcore\include\cxcore.h 100
错误 18 error C2275: 'CvSize' : illegal use of this type as an expression d:\program files\opencv\cxcore\include\cxcore.h 100
错误 19 error C2146: syntax error : missing ')' before identifier 'size' d:\program files\opencv\cxcore\include\cxcore.h 100
警告 20 warning C4229: anachronism used : modifiers on data are ignored d:\program files\opencv\cxcore\include\cxcore.h 100
错误 21 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int d:\program files\opencv\cxcore\include\cxcore.h 100
错误 22 error C2078: too many initializers d:\program files\opencv\cxcore\include\cxcore.h 100
错误 23 error C2275: 'CvSize' : illegal use of this type as an expression d:\program files\opencv\cxcore\include\cxcore.h 100
错误 24 error C2059: syntax error : ')' d:\program files\opencv\cxcore\include\cxcore.h 102
错误 25 error C2143: syntax error : missing ';' before '*' d:\program files\opencv\cxcore\include\cxcore.h 105
错误 26 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int d:\program files\opencv\cxcore\include\cxcore.h 105
错误 27 error C2371: 'IplImage' : redefinition; different basic types d:\program files\opencv\cxcore\include\cxcore.h 105
错误 28 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int d:\program files\opencv\cxcore\include\cxcore.h 105
警告 29 warning C4229: anachronism used : modifiers on data are ignored d:\program files\opencv\cxcore\include\cxcore.h 108
错误 30 error C2182: 'cvReleaseImageHeader' : illegal use of type 'void' d:\program files\opencv\cxcore\include\cxcore.h 108
错误 31 fatal error C1903: unable to recover from previous error(s); stopping compilation d:\program files\opencv\cxcore\include\cxcore.h 108