gpt4 book ai didi

c++ - 外部库错误 C++

转载 作者:太空宇宙 更新时间:2023-11-04 11:40:05 25 4
gpt4 key购买 nike

我在编译 DLL 文件项目时遇到了一些问题。有 2 个文件 CDLL.h 和 CDLL.cpp:

CDLL.h:

#pragma once

namespace CDLL {

class CDLL
{

static unsigned char TransLut[256];

public:
__declspec(dllexport) void build_lookup_table ( int contr);
__declspec(dllexport) bool Contrast(HBITMAP * phBitmap, int iCount);
};
}

CDLL.cpp:

#include "Stdafx.h"
#include "CDLL.h"
#include <math.h>
#include <windows.h>

namespace CDLL
{
void CDLL::build_lookup_table(int contr)
{
float step, step_value;

for (int i=0; i < 256; i++)
TransLut[i] = i;

if (contr > 0)
{
unsigned int MinBin = contr;
unsigned int MaxBin = 255 - contr;

step = sqrt((double)contr)/contr;
step_value = 0.0;

for (int i = 0; i < MinBin; i++)
{
TransLut[i] = (unsigned char)step_value;
step_value += step;
}

step = 256.0f / (float)(MaxBin-MinBin);

for (int i = MinBin; i <= MaxBin; i++)
{
if (step_value > 255.0f)
{
step_value = 255.0f;
step = 0.0f;
}

TransLut[i] = (unsigned char)step_value;
step_value += step;
}

for (int i = MaxBin + 1; i < 256; i++)
TransLut[i] = 255;

}
else if (contr < 0)
{
step = (256.0+(float)(contr*2))/256.0;
step_value = (float)contr * -1.0;

for (int i = 0;i < 256; i++)
{
TransLut[i] = (unsigned char)step_value;
step_value += step;
}
}
}

bool CDLL::Contrast(HBITMAP * phBitmap, int iCount)
{
BITMAP bm;
BYTE * pBits;
RGBQUAD * pRgb;
WORD wByteCount;
int i, iPixels, gray;

build_lookup_table(iCount);

// Take BITMAP structure from HBITMAP

GetObject(*phBitmap, sizeof(BITMAP), &bm);

// Calculate bytes to read

wByteCount = bm.bmHeight * (2 * ((bm.bmWidth * bm.bmBitsPixel + 15) / 16));

// Alocate momory for bits od pixels and get pointers

pBits = (BYTE *) malloc(wByteCount);
GetBitmapBits(*phBitmap, wByteCount, pBits);

// Convert pointer to byte to pointer to RGBQUAD

pRgb = (RGBQUAD *) pBits;

// Operate on pixel's colors

iPixels = wByteCount / (bm.bmBitsPixel / 8);

for(int i = 0; i < iPixels; i++, pRgb++)
{
gray = (pRgb->rgbRed + pRgb->rgbGreen + pRgb->rgbBlue) / 3;
int k = TransLut[gray]-gray;

pRgb->rgbRed = min(pRgb->rgbRed + k, 255);
pRgb->rgbGreen = min(pRgb->rgbGreen + k, 255);
pRgb->rgbBlue = min(pRgb->rgbBlue + k, 255);
}

SetBitmapBits(*phBitmap, wByteCount, pBits);

return TRUE;
}

}

我不明白为什么会出现这样的错误:

  1. 错误 C2061:语法错误:标识符“HBITMAP”CDLL.h
  2. 错误 C2511:“bool CDLL::CDLL::Contrast(HBITMAP *,int)”:过载在“CDLL::CDLL”CDLL.cpp 中找不到成员函数

#2 不是关于头文件中方法的声明吗?我该如何解决这个问题?

最佳答案

HBITMAP 类型是 windows specific type .在您的代码中,您似乎忘记了包含适当的 header 。这可能是问题所在。

关于c++ - 外部库错误 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21712386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com