在Dib.h中定义了这么一个函数:// 从DDB中创建DIB,实现DDB到DIB的转换
bool ConvertFromDDB(HBITMAP hBitmap, HPALETTE hPal);
而在Dib.cpp中该函数的实现时,有这么一句代码:if(hPal==NULL){
hPal = GetSystemPalette();
}
但是在Dib.h中根本没有定义GetSystemPalette()函数,该函数的定义是在GlobalApi.h中定义的,问题之一就是GlobalApiz只有.h文件,没有.cpp文件。GlobalApi.h定义如下:
#ifndef _GLOBAL_API #define _GLOBAL_API
#include<math.h>
#include"dib.h"
#include<complex>
using namespace std;
{ ........
HPALETTE GetSystemPalette();
........}
运行连接时就报错:1>dib.obj : error LNK2019: 无法解析的外部符号 "struct HPALETTE__ * __cdecl DIB::GetSystemPalette(void)" (?GetSystemPalette@DIB@@YAPAUHPALETTE__@@XZ),该符号在函数 "public: bool __thiscall DIB::CDib::ConvertFromDDB(struct HBITMAP__ *,struct HPALETTE__ *)" (?ConvertFromDDB@CDib@DIB@@QAE_NPAUHBITMAP__@@PAUHPALETTE__@@@Z) 中被引用
恳请各路高手帮忙!!!非常感谢!
7 个解决方案
#1
应该有lib文件吧!
将这个lib文件加上
将这个lib文件加上
#2
/*************************************************************************
*
* GetSystemPalette()
*
* Parameters:
*
* None
*
* Return Value:
*
* HPALETTE - handle to a copy of the current system palette
*
* Description:
*
* This function returns a handle to a palette which represents the system
* palette. The system RGB values are copied into our logical palette using
* the GetSystemPaletteEntries function.
*
************************************************************************/
HPALETTE GetSystemPalette(void)
{
HDC hDC; // handle to a DC
static HPALETTE hPal = NULL; // handle to a palette
HANDLE hLogPal; // handle to a logical palette
LPLOGPALETTE lpLogPal; // pointer to a logical palette
int nColors; // number of colors
// Find out how many palette entries we want.
hDC = GetDC(NULL);
if (!hDC)
return NULL;
nColors = PalEntriesOnDevice(hDC); // Number of palette entries
// Allocate room for the palette and lock it.
hLogPal = GlobalAlloc(GHND, sizeof(LOGPALETTE) + nColors *
sizeof(PALETTEENTRY));
// if we didn't get a logical palette, return NULL
if (!hLogPal)
return NULL;
// get a pointer to the logical palette
lpLogPal = (LPLOGPALETTE)GlobalLock(hLogPal);
// set some important fields
lpLogPal->palVersion = PALVERSION;
lpLogPal->palNumEntries = nColors;
// Copy the current system palette into our logical palette
GetSystemPaletteEntries(hDC, 0, nColors,
(LPPALETTEENTRY)(lpLogPal->palPalEntry));
// Go ahead and create the palette. Once it's created,
// we no longer need the LOGPALETTE, so free it.
hPal = CreatePalette(lpLogPal);
// clean up
GlobalUnlock(hLogPal);
GlobalFree(hLogPal);
ReleaseDC(NULL, hDC);
return hPal;
}
#3
网卡有不少CDib的版本,你找到的可能不全
#4
改正:网上有不少CDib的版本,你找到的可能不全
#5
2楼的高手,我把代码重新封装整理过之后,又出现了的一个问题:error LNK2019: 无法解析的外部符号 "int __cdecl DIB::PalEntriesOnDevice(struct HDC__ *)" (?PalEntriesOnDevice@DIB@@YAHPAUHDC__@@@Z),该符号在函数 "public: struct HPALETTE__ * __thiscall DIB::CDib::GetSystemPalette(void)" (?GetSystemPalette@CDib@DIB@@QAEPAUHPALETTE__@@XZ) 中被引用
1>.\Debug/DIBImage2.exe : fatal error LNK1120: 1 个无法解析的外部命令。
可能,真的少了lib文件。
我的代码包含的头文件是:#include "stdafx.h"
#include "stdlib.h"
#include "math.h"
#include "process.h"
#include "dib.h"
#include "GlobalApi.h"
不知道少了那个文件?麻烦各位了!!!!
1>.\Debug/DIBImage2.exe : fatal error LNK1120: 1 个无法解析的外部命令。
可能,真的少了lib文件。
我的代码包含的头文件是:#include "stdafx.h"
#include "stdlib.h"
#include "math.h"
#include "process.h"
#include "dib.h"
#include "GlobalApi.h"
不知道少了那个文件?麻烦各位了!!!!
#6
怎么没人理我,再次恳求帮助!!
#7
时隔两年后我看到楼主的帖子 不知道楼主现在还在做这方面吗 我遇到一些问题 希望能请教下楼主qq531858519
#1
应该有lib文件吧!
将这个lib文件加上
将这个lib文件加上
#2
/*************************************************************************
*
* GetSystemPalette()
*
* Parameters:
*
* None
*
* Return Value:
*
* HPALETTE - handle to a copy of the current system palette
*
* Description:
*
* This function returns a handle to a palette which represents the system
* palette. The system RGB values are copied into our logical palette using
* the GetSystemPaletteEntries function.
*
************************************************************************/
HPALETTE GetSystemPalette(void)
{
HDC hDC; // handle to a DC
static HPALETTE hPal = NULL; // handle to a palette
HANDLE hLogPal; // handle to a logical palette
LPLOGPALETTE lpLogPal; // pointer to a logical palette
int nColors; // number of colors
// Find out how many palette entries we want.
hDC = GetDC(NULL);
if (!hDC)
return NULL;
nColors = PalEntriesOnDevice(hDC); // Number of palette entries
// Allocate room for the palette and lock it.
hLogPal = GlobalAlloc(GHND, sizeof(LOGPALETTE) + nColors *
sizeof(PALETTEENTRY));
// if we didn't get a logical palette, return NULL
if (!hLogPal)
return NULL;
// get a pointer to the logical palette
lpLogPal = (LPLOGPALETTE)GlobalLock(hLogPal);
// set some important fields
lpLogPal->palVersion = PALVERSION;
lpLogPal->palNumEntries = nColors;
// Copy the current system palette into our logical palette
GetSystemPaletteEntries(hDC, 0, nColors,
(LPPALETTEENTRY)(lpLogPal->palPalEntry));
// Go ahead and create the palette. Once it's created,
// we no longer need the LOGPALETTE, so free it.
hPal = CreatePalette(lpLogPal);
// clean up
GlobalUnlock(hLogPal);
GlobalFree(hLogPal);
ReleaseDC(NULL, hDC);
return hPal;
}
#3
网卡有不少CDib的版本,你找到的可能不全
#4
改正:网上有不少CDib的版本,你找到的可能不全
#5
2楼的高手,我把代码重新封装整理过之后,又出现了的一个问题:error LNK2019: 无法解析的外部符号 "int __cdecl DIB::PalEntriesOnDevice(struct HDC__ *)" (?PalEntriesOnDevice@DIB@@YAHPAUHDC__@@@Z),该符号在函数 "public: struct HPALETTE__ * __thiscall DIB::CDib::GetSystemPalette(void)" (?GetSystemPalette@CDib@DIB@@QAEPAUHPALETTE__@@XZ) 中被引用
1>.\Debug/DIBImage2.exe : fatal error LNK1120: 1 个无法解析的外部命令。
可能,真的少了lib文件。
我的代码包含的头文件是:#include "stdafx.h"
#include "stdlib.h"
#include "math.h"
#include "process.h"
#include "dib.h"
#include "GlobalApi.h"
不知道少了那个文件?麻烦各位了!!!!
1>.\Debug/DIBImage2.exe : fatal error LNK1120: 1 个无法解析的外部命令。
可能,真的少了lib文件。
我的代码包含的头文件是:#include "stdafx.h"
#include "stdlib.h"
#include "math.h"
#include "process.h"
#include "dib.h"
#include "GlobalApi.h"
不知道少了那个文件?麻烦各位了!!!!
#6
怎么没人理我,再次恳求帮助!!
#7
时隔两年后我看到楼主的帖子 不知道楼主现在还在做这方面吗 我遇到一些问题 希望能请教下楼主qq531858519