目標: Windows Phone 7 の名前 (「My Windows Phone」など) を取得する。
上記のコードは C++ で提供されていますが、C# に変更したいと考えています。理由の 1 つは、私が Visual Studio 2012 Express しか持っておらず、C++ を Windows Phone プロジェクトと一緒に使用することができず、VS2013 を既に購入しているため、これだけのために VS2012 を購入する余裕がないためです。もう 1 つの理由は、C++ の依存ファイルが 150 を超えていることです。これはコードが多すぎます。
だから、私の最初の試み:(http://www.experts-exchange.com/Programming/Languages/.NET/Q_21014265.htmlに触発された)
[StructLayout(LayoutKind.Sequential)]
internal struct WSAData
{
public short wVersion;
public short wHighVersion;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)]
public string szDescription;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)]
public string szSystemStatus;
public short iMaxSockets;
public short iMaxUdpDg;
public int lpVendorInfo;
}
[DllImport("wsock32.dll")]
internal static extern int WSAStartup(
[In] short wVersionRequested,
[Out] out WSAData lpWSAData
);
[DllImport("wsock32.dll")]
internal static extern int WSACleanup();
public static void Test()
{
WSAData dummy;
WSAStartup(0x0002, out dummy);
// TODO: more stuff
WSACleanup();
}
WSAStartup(0x0002, out dummy);
例外で失敗します:
MyLibrary.dll で、タイプ 'System.MethodAccessException' の初回例外が発生しました
追加情報: メソッドにアクセスしようとして失敗しました: MyLibrary.WSAStartup(System.Int16, .WSAData&)
そして私の2回目の試み:( Convert service name to port に触発された)
[StructLayout(LayoutKind.Sequential)]
public struct WSAData
{
public short version;
public short highVersion;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)]
public string description;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)]
public string systemStatus;
public short maxSockets;
public short maxUdpDg;
public IntPtr vendorInfo;
}
internal static class NativeMethods
{
[DllImport("Ws2_32.dll")]
public static extern Int32 WSAStartup(short wVersionRequested, ref WSAData wsaData);
[DllImport("Ws2_32.dll")]
public static extern Int32 WSACleanup();
}
public static void Test()
{
WSAData dummy = new WSAData();
NativeMethods.WSAStartup(0x0202, ref dummy);
// TODO: more stuff
NativeMethods.WSACleanup();
}
NativeMethods.WSAStartup(0x0202, ref dummy);
例外で失敗します:
MyLibrary.dll で、タイプ 'System.MethodAccessException' の初回例外が発生しました
追加情報: メソッドにアクセスしようとして失敗しました: MyLibrary+NativeMethods.WSAStartup(System.Int16, .WSAData&)
WP7 デバイスで動作させるためのアドバイスはありますか?
[編集:この投稿は、バージョン 0x0101 で WSAStartup() を使用する可能性も示唆しています]