winCE 6.0 バージョンで ac# アプリケーションを実行しています。実行時に SD カード ドライバをアンロード/リロードする必要があります。FindFirstDevice を呼び出してから DeactivateDevice/ActivateDeviceEX を呼び出してこれを実行しようとしています。私の問題は、FindFirstDevice() 呼び出しが常に失敗することです。2番目のパラメーターをマーシャリングする方法に問題があると思います。誰が私が間違っているのか教えてもらえますか? コードは次のとおりです。
[DllImport("coredll.dll", SetLastError = true)]
public static extern int FindFirstDevice(DeviceSearchType
searchType, IntPtr searchParam, ref DEVMGR_DEVICE_INFORMATION pdi);
public bool MountSDCardDrive(string mRegPath)
{
const int INVALID_HANDLE_VALUE = -1;
int handle = INVALID_HANDLE_VALUE;
DeviceSearchType searchType = DeviceSearchType.DeviceSearchByDeviceName;
DEVMGR_DEVICE_INFORMATION di = new DEVMGR_DEVICE_INFORMATION();
di.dwSize = (uint)Marshal.SizeOf(typeof(DEVMGR_DEVICE_INFORMATION));
string searchParamString = "*";
IntPtr searchParam = Marshal.AllocHGlobal(searchParamString.Length);
Marshal.StructureToPtr(searchParamString, searchParam, false);
handle = FindFirstDevice(searchType, searchParam, ref di);
if (handle == INVALID_HANDLE_VALUE)
{
// Failure - print error
int hFindFirstDeviceError = Marshal.GetLastWin32Error();
using (StreamWriter bw = new StreamWriter(File.Open(App.chipDebugFile, FileMode.Append)))
{
String iua = "DevDriverInterface: error from FindFirstDevice: " + hFindFirstDeviceError.ToString();
bw.WriteLine(iua);
}
return false;
}
... (rest of code)
行Marshal.StructureToPtr(searchParamString, searchParam, false);
をsearchParam = Marshal.StringToBSTR(searchParamString);
「18 (これ以上ファイルがありません) ではなくエラー 1168 (ERROR_NOT_FOUND) で終わる」 に変更すると、
私の意図は、これを機能さsearchParamString
せるときに「SDH1」を使用することです。私は現在searchParamString
、何かが返されたことを確認し、特定の文字列値を除外するために「*」を使用しています。
助けてくれてありがとう - リン