跳到主要內容

發表文章

c++(/clr)非託管類型和託管類型互轉

c++(/clr)非託管類型和託管類型互轉 轉載於: http://www.cnblogs.com/kekec/archive/2011/03/25.html 以下代碼必須有「Common Language Runtime Support(/clr)」 和「MFC」支持 1. 字符竄之間的轉換 1 // 託管類型到非託管類型 2 inline CString ManageToUnManageStr(System::String^ cmStr) 3 { 4 using namespace System::Runtime::InteropServices; 5 CString cStr = (char*)(Marshal::StringToHGlobalAnsi(cmStr)).ToPointer(); 6 return cStr; 7 } 8 9 // 非託管類型到託管類型 10 inline System::String^ UnManageToManageStr(const CString& cStr) 11 { 12 const char* cc = (LPCTSTR)cStr; 13 System::String^ cmStr = gcnew System::String(cc); 14 return cmStr; 15 } 2. 對象之間的轉換 1 // _variant_t到Object對象 2 inline System::Object^ VarToObject(_variant_t var) 3 { 4 using namespace System::Runtime::InteropServices; 5 System::IntPtr^ pvar = gcnew System::IntPtr(&var); 6 System::Object^ obj = Marshal::GetObjectForNativeVariant(*pvar); 7 return obj; 8 } 9 10 // Object對象到_variant_t 11 inline _variant_t* ObjectToVar(System::Object^ obj) 12 { 13 using namespace
最近的文章

C 和 C++ 的 Callback

C Callback Function with C++ Class 轉載於: http://lak4cyut.blogspot.tw/2008/08/c-callback-function-with-class.html 由於 C/C++ 語言的特性,許多 API 是必需要利用 Callback function 才能完成作用 在 C 的時代這是很合理也很直覺化的設計,但若將場景拉到 C++ 呢.... --此篇除了介紹 How 之外,也將對 Why 進行簡單的介紹,希望能夠令不知其所以然的人有所幫助。-- Effective C++m 一書將 C++ 視為一種語言聯邦,而其中最簡單及常被討論到的,我想大概是屬於 OOP 的部份。 在 C++ 中利用 Class 來實現 OO 的許多精神,許多的程式設計都會採用 OO 的封裝特性,也因此當你需要使用某些 API 時,會面臨到 callback function 設計不易的問題。包括如何取用物件內的屬性、如何將物件傳入等問題,假設利用 non-member function 來設計 callback function,為了能令 callback function 順利的存取相關的物件內的資料,可能會在某種程度上破壞掉物件的封裝性。 因此,若以封裝性的角度來看,我們當然會希望能夠直覺的以 class member function 來做為 callback function,如此一來,便可以在不破壞封裝性的情況下,依然順利的使用物件內的屬性。 在這個前提下,便會很直覺的寫出以下的程式段: class CMyClass { public: void Mainfunc() ; void CBfunc(void *) ; private: int iData ; int iInc ; } int CMyClass::CBfunc(void *iIncLoc) { int _i = (int)iIncLoc ; return iData+_i ; } void CMyClass::Mainfunc() { // APIfunc( *pCallback, *pParam) <-- br=""> APIfunc(CBfunc, i

boost安裝: vs2008[轉載]

boost安裝: vs2008 [轉載] boost是C++的准標準庫,不學是要吃虧的!在這裡記錄下boost在VS2008上的編譯及配置方法,以前編譯過很多次了,到現在還是需要查資料,在這裡記錄下。。。 下載boost後解壓,然後進入boost文件夾下的tools\build\v2,根本不需要做什麼什麼修改,直接雙擊運行bootstrap.bat就可以獲得bjam.exe,然後將bjam.exe拷貝到上兩級文件夾中,即boost根目錄下,然後啟動windows的cmd進入boost的根目錄,運行如下指令 bjam.exe --toolset=msvc-9.0 --link=static --runtime-link=shared --threading=multi --without-python stage debug release 這樣就可以編譯出靜態庫的boost,既然boost是准標準庫,就跟stl一樣對待吧! 將boost/stage/libs下的所有lib文件都拷貝到vs2008的VC目錄下的libs中,然後將boost根目錄下的boost的文件夾拷貝到VC下的inlcude中,這樣就可以跟STL一樣使用boost了,並且不需要在運行時手動的指定鏈接庫。 這裡舉個例子,創建windows控制台應用程序工程,然後添加如下代碼 #include #include void func() {  std::cout << "Boost Thread Test!" << std::endl; } int main(int argc,char ** argv) {  boost::thread thread(&func);  thread.join(); } 如果編譯上述代碼沒有錯誤,那麼說明boost已經配置成功了。

.NET操作EXCEL時出現的錯誤

  在免部署 Office PIAs (Primary Interop Assemblies) 的情況下存取 Office 物件模型 (以下轉載) Microsoft::Office::Interop::Excel::ApplicationClass ^app  = gcnew Microsoft::Office::Interop::Excel::ApplicationClass(); Microsoft::Office::Interop::Excel::WorkbookClass ^wrk = app->Workbooks->Add() ASP.NET操作EXCEL時出現的錯誤 Retrieving the COM class factory for component with CLSID(轉) 解決方案: 運行dcomcnfg打開組件服務 依次展開"組件服務"->"計算機"->"我的電腦"->"DCOM配置" 找到"Microsoft Excel應用程序" 右鍵打開屬性對話框,點擊"標識"選項卡 點"下列用戶",把管理員的用戶密碼正確填寫進去... 點擊"安全"選項卡, 依次把"啟動和激活權限","訪問權限","配置權限",都選擇為自定義, 然後依次點擊它們的編輯,把everyone添加進去,並加入所有的權限... OK,解決此問題! MMC是以x64來執行的,它會排除掉x32的DCOM伺服器,如下,看不到Microsoft Excel Application 解決方式也很容易,就是要以x32方式執行MMC已開啟元件服務,我們知道元件服務是"comexp.msc"這個描述檔後, 只要在開始工具列-->執行 如下命令: mmc comexp.msc /32

別了,連長

2011/8/27,算來你也14歲了。 雖然我喜歡你的程度比不上馬克,但是依然把你視為家庭裡的一員。 你然沒有馬克的機靈,但是比馬克還勇敢。 26號晚上回台中,看到你骨瘦如材無法動彈,傷口還不斷潰爛。 時而哀嚎,哥哥知道勇敢的你,一定承受很大的痛苦。 喊了你一聲,看你努力的掙扎,好像要爬起來,照往常一樣迎接哥哥。 我真的好難過,好難過… 原諒哥哥做的決定,把你送到動物醫院也是逼不得已的。 哥哥實在不願意看到你繼續痛苦下去。 希望你來生,可以快快樂樂的過一輩子。

婚事昏事

結婚的過程中,加入的討論婚事的親友會 越來越多。 當中某些人會有一個小小的要求。 然後很多人就 變成很多小小的要求… 而最無奈的是,通常在這些小小的 要求中,總是會有互斥的事件發生。 我們通常會去追求遙不可及的最佳解,而結果往往是徒勞無功。 親友們都是基於『關心』,當然也可以解釋為湊熱鬧。 但畢竟最後是我們兩個人要私守到老,那群敲鑼打鼓的人,結婚完之後,就拍拍屁股走人了。 這個情節,正是愛情媽媽咪一劇要表達的。 我們希望尋求每個人的祝福,不過不希望他們的『祝福』,形成我們的夢魘。