日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

WIN7 UAC/结构体的Equals方法/C# 开发wince程序,窗口上总留有一块空白区域/静态构造函数...

發布時間:2025/7/14 C# 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WIN7 UAC/结构体的Equals方法/C# 开发wince程序,窗口上总留有一块空白区域/静态构造函数... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. vs2005在win7下通過IIS7調試時,調用dll失敗,但在XP下正常。相信是權限問題,請問應該如何解決?能不能設置dll默認以管理員身分運行?
備注:此DLL已注冊成功!

回復引用
全部回復
2010年10月13日 12:30mazhou?
先檢查一下這個 DLL 調用,是否有 E_ACCESS_DENIED 錯誤,如果有,那就是 UAC 的問題。

DLL 并不是一個宿主,它需要依靠特定的宿主 (如動態鏈接它的可執行文件,或者 RunDll32,DllHost,SvsHost 等其他輔助) 才能運行。因此,需要在其宿主進程上設置 UAC 級別。所以,不可以對 DLL 單獨設置 UAC 運行級別。

Windows 7 的 IIS 有幾種運行用戶憑據,一個是 ApplicationPool,這個的話,默認用戶是 IUSR 匿名用戶,需要把該用戶的權限加成可執行;如果是指定憑據,如 Network Service,則把相應的系統用戶權限加給這個 DLL?;旧隙寄芙鉀Q問題。

如果用 ApplicationPool 不行的話,直接把憑據改成 Network Service,然后給 DLL 加 Network Service 完全控制。一般問題可以解決。

?

2. 結構體的Equals方法是采用值語義來比較的,也就是只要兩個結構體的實例的值相等,兩個結構體實例就相等。

大家看這個Demo:

??? public struct S
??? {
??????? public double a;
??????? public double b;
??? }

??????????? S s1, s2;
??????????? s1.a = s2.a = 1;
??????????? s1.b = 0.0;
??????????? s2.b = -0.0;
??????????? bool r2 = s1.Equals(s2); // 這里居然是false
??????????? Console.WriteLine(r2);

而且更奇怪的是把struct定義的a字段改成float

??? public struct S
??? {
??????? public float a;
??????? public double b;
??? }

那么s1.Equals(s2)就返回true了,這個太奇怪了,a的類型不知道怎么會影響比較的結果!

經測試,只要a和b是同樣的類型,同時是float類型或同時是double類型,那結果就是false,只有a和b類型不同,結果才是true.

這個問題研究好久了,實在是沒有想出為什么是這樣的現象,請教一下大家啊。

查了一下原因,情況是這樣的。

因為 struct 的 Equals 方法,是實際上調用 System.ValueType.Equals(Object) 方法。而這個方法做了這 4 步的計算:

1、判斷傳入的參數 obj 是否為 null,如果 null,返回 false。
2、判斷傳入參數的類型是不是與被比較的 this 類型相同,如果不同,返回 false。
3、判斷如果 this 和傳入參數可以被二進制比較,則進行快速二進制比較。
4、利用反射獲得每一個公共字段的值,并調用其基礎類型上的 Equals 方法進行逐個比較。

您的問題是,因為 struct 類型是值類型,當其所有域的類型相同時,其內部數據類型會得到優化,以節約存儲空間 (類似于 C++ 的 Align)。上面的代碼使用了基元類型 (primitive type) 且所有域都是同一基元類型,此時第三步 CanCompareBits 返回 true,因此調用了 FastEqualsCheck 而沒有進行第四步,所以,結果返回 false。

這可能是 .NET CLR 的一個潛在 bug,不幸的是我并不能拿到 CanCompareBits 和 FastEqualsCheck 的源代碼 (因為它們是用本地匯編寫的)。但請將這個問題提交給 Microsoft,以便得到更好的解釋。

需要說明的是,如果將 foo2.Bar2 和 foo1.Bar2 都賦值為非 0 的 double 值,結果就會是 true。

--------------------------------------------------------------------------------
Mark Zhou
已標記為答案mldark版主2010年7月21日 8:05

3. C# 開發wince程序,窗口上總留有一塊空白區域
如果這個窗口帶菜單,那么就沒有這個問題
不帶菜單窗口,那么窗口上原來菜單的那塊地方,就無法使用,放控件都是給隱藏了,就留出了這快空白區域??
hi,
1.您的意思是說把菜單控件砍掉,仍無法使用winform窗口的位置??
2.按ctrl+alt+t觀察控件的順序,把你要顯示在最上層的控件往上提

4. 靜態構造函數用于初始化任何靜態數據,或用于執行僅需執行一次的特定操作。在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數。

靜態構造函數具有以下特點:
??? 靜態構造函數既沒有訪問修飾符,也沒有參數。
??? 在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數來初始化類。
??? 無法直接調用靜態構造函數。
??? 在程序中,用戶無法控制何時執行靜態構造函數。
??? 靜態構造函數的典型用途是:當類使用日志文件時,將使用這種構造函數向日志文件中寫入項。
??? 靜態構造函數在為非托管代碼創建包裝類時也很有用,此時該構造函數可以調用 LoadLibrary 方法。

1. STAThreadAttribute 指示應用程序的 COM 線程模型是單線程單元。使用 Windows 窗體的任何應用程序的入口點上必須存在STAThreadAttribute 屬性;如果沒有此屬性,則 Windows 組件可能無法正常工作。如果不存在此屬性,則應用程序使用 Windows 窗體不支持的多線程單元模型。

轉載于:https://www.cnblogs.com/pursue/archive/2010/10/21/1857410.html

總結

以上是生活随笔為你收集整理的WIN7 UAC/结构体的Equals方法/C# 开发wince程序,窗口上总留有一块空白区域/静态构造函数...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。