小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

dialogs in dll

 bluecrystal 2006-08-04

c


原著: randy more.

建立一個擁有自己的資源文件(例如對話框資源)的動態(tài)鏈接庫工程 ,并在別的工程中調(diào)用.

in the dll function that pops up the dialog you must manage the state so that the dll code uses the dll‘s resources.


extern __declspec(dllexport) void showeditdialog(int &mydata1, int &mydata2)
{
//ensure we are using our own resources
afx_manage_state(afxgetstaticmodulestate());
cmylocaldialog dlg;
dlg.arg1 = mydata1; //specific local data for mylocaldialog
dlg.arg2 = mydata2;
dlg.domodal();
mydata1 = dlg.arg1; //data after processing
mydata2 = dlg.arg2;
}

外部調(diào)用這個動態(tài)鏈接庫的程序中不能直接用 getlasterror()來判斷錯誤的發(fā)生.這是因為 afx_manage_state macro建立一個臨時的堆棧,當(dāng)函數(shù)結(jié)束時會自動析構(gòu),其中保存的錯誤當(dāng)然也不復(fù)存在。

解決方案 :


extern __declspec(dllexport) void showeditdialog(int &mydata1, int &mydata2)
{
dword dwlasterr = no_error;
//
// surround the code in brackets, which will cause the temporary
// object created by afx_manage_state to be destroyed before leaving
// the exported function.
//
// note : do not call mfc code outside of these brackets.
//
{
afx_manage_state(afxgetstaticmodulestate());
cmylocaldialog dlg;
dlg.arg1 = mydata1; //specific local data for mylocaldialog
dlg.arg2 = mydata2;
dlg.domodal();
mydata1 = dlg.arg1; //data after processing
mydata2 = dlg.arg2;
//
// save possible errors
//
dwlasterr = ::getlasterror();
}
//
// only set error if none is currently set.
// (last error will always be no_error _unless_
// tlsgetvalue failed earlier)
//
if (::getlasterror() == no_error)
::setlasterror(dwlasterr);
}

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多