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個項目配置好,建構成功之後再試;