初次使用CxImage类库、VC6配置UNICODE的方法
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個項目配置好,構建成功之后再試;
總結
以上是生活随笔為你收集整理的初次使用CxImage类库、VC6配置UNICODE的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab图形用户界面编程初级入门
- 下一篇: Three.js 入门示例