2009-01-14 20 views
0

我有此P/Invoke RegSetValueExW將該值設置爲註冊表項。在C#如何將具有整數值的(byte [] lpData)傳遞給RegSetValueExW P/Invoke

[DllImport("coredll.dll", EntryPoint = "RegSetValueExW")] 
public static extern int RegSetValueExW(uint hKey, string lpValueName, 
      uint lpReserved, 
      uint lpType, 
      byte[] lpData, 
      uint lpcbData); 

我遇到了第四個參數byte [] lpdata的問題。我需要傳遞一個值爲5(int)的DWORD。如果我傳遞一個字符串(REG_SZ),一切都可以,只需要使用GetBytes函數進行轉換即可。

如果我叫GetBytes會(「5」)也將其轉換爲ASCII值的53 所以它的註冊表值,而不是5

回答

2

我得寫53問爲什麼你正在使用的PInvoke啓動這裏當已經有一個方法來設置Microsoft.Win32.RegistryKey類中的註冊表值時?還是你堅持使用舊版本的Compact Framework?

假設您對PInvoke有很好的理由,最簡單的答案就是重載PInvoke聲明的整數值。即:

[DllImport("coredll.dll", EntryPoint = "RegSetValueExW")] 
public static extern int RegSetValueExW(uint hKey, string lpValueName, 
     uint lpReserved, 
     uint lpType, 
     ref int lpData, 
     uint lpcbData); 
0

如果你需要傳遞一個整數值,你可以簡單地將它轉換爲字節

byte[] lpData = new byte[] { (byte)5 }; 
+0

這很危險 - 如果值大於255,肯定不會工作。 – 2009-01-14 16:24:54

1

使用REG_DWORD而不是REG_SZ,然後用BitConverter.GetBytes(Int32)已爲int轉換爲一個字節[]。

相關問題