初次使用CxImage類庫、VC6配置UNICODE的方法

bcbobo21cn發表於2020-12-05

CxImage類庫是一個影像操作類庫,功能比較強;是完全免費和公開原始碼的;

下載一份,VC6開啟,Win7;一共有13個專案;一時看不清;

直接構建;生成一個cximage.lib;莫非是一個靜態庫可直接呼叫;

 

靜態庫”和“動態庫”的區別
    靜態庫將匯出宣告和實現都放在lib中,編譯後所有程式碼都嵌入到宿主程式, 連結器使用從靜態連結庫LIB獲取所有被引用函式的宣告與實現,最後連結生成放入exe檔案。,並將庫同程式碼一起放到可執行檔案中。
    動態庫相當於一個h檔案,是對實現部分(.dll檔案)的匯出部分的宣告,編譯後只是將匯出宣告部分編譯到宿主程式中,執行時候需要相應的dll檔案支援, 包含了函式所在的DLL檔案和檔案中函式位置的資訊(入口),因此連結器使用從動態庫的LIB獲取所有被引用宣告,最後連結生成放入exe檔案。exe執行時載入在當前目錄中的DLL。因此這種方式稱為動態連結庫dynamic link library。

 

先按靜態庫的方式呼叫一下;

#include "stdafx.h"
#include "ximage.h"
#include <iostream>

using namespace std;

#pragma comment(lib, "cximage.lib")

int main(int argc, char* argv[])
{
    CxImage img1;
	img1.Load("a.jpg", 3);
    int size= img1.GetSize();

	cout << size << endl;
	getchar();
	return 0;
}

構建,出現下面錯誤;

查網上cximage資料,構建出的lib是unicode版本,需要把工程改為unicode版本;

VC6操作如下,預處理程式定義新增:,UNICODE,_UNICODE;

入口點這裡手動輸一下; 因為MFC應用程式有針對Unicode專用的程式入口點,要設定entry point;

再構建,一堆錯;生成lib檔案的目錄下還有很多obj檔案,拷貝到專案,再構建,還是一樣;

操作了幾次,變成如下;Load函式,載入檔案,3 是jpg檔案的預定義型別;

看樣子不行;可能構建cximage時有問題,需要生成dll才能呼叫;網上先下一個來看;

寫如下的程式碼呼叫動態庫;庫拷貝到專案目錄;使用#import匯入dll;

#include <Windows.h>
#include "stdafx.h"
#include "ximage.h"
#include <iostream>

using namespace std;

//#pragma comment(lib, "cximage.lib")
//typedef int (__stdcall *Func)(int param);
#import "cximage.dll" 

int main(int argc, char* argv[])
{
	//HINSTANCE hdllInst = LoadLibrary("cximageu.dll"); 
	//Func func=(Func)GetProcAddress(hdllInst,"Load");
    CxImage img1;
	img1.Load("a.jpg", 3);
    int size= img1.GetSize();

	cout << size << endl;
	getchar();
	return 0;
}

構建一下;出現 fatal error C1083; 

查相關資料,先把下面預設項,

改為如下;

再構建看一下,還是一樣;

 

然後從 選項 對話方塊,把庫目錄包含進來;

 

再構建;還是一樣;把dll拷貝到系統目錄,執行regsvr32來註冊,註冊不了;

 

看一下下的dll是32位版,系統是64位;重新下一個cximage的64位dll來,這是別人構建好的;拷貝到系統目錄,註冊;

 

    註冊不了, regsvr32 cximage.dll;那麼就無法呼叫其類庫;

 

看來Win7以上不能使用CxImage;或者自己按資料把13個專案配置好,構建成功之後再試;

相關文章