2017-06-30 5 views
0

私が現在書いているアプリケーションに奇妙な問題があります。私は最近、以下のコード内で何も変更していないと確信していますが、何とかそれは動作を停止しました。 ポイントまで。 私が使用しています:C#からアンマネージコードを呼び出します。 IntPtrを使用してデータを取得する

[DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)] 
    public static extern uint NetShareGetInfo(
     string servername, 
     string netname, 
     int level, 
     out IntPtr ppBuf 
     ); 

NETAPI32.DLLをインポートするには。私は物理的な道が必要です。 WMIとWinRMは使用できません。 そしてIは、以下のように列挙型と構造体を有する:

public enum ShType 
    { 
     DiskTree = 0, 
     PrintQ = 1, 
     Device = 2, 
     IPC = 3, 
     Temporary = 0x40000000, 
     Special = unchecked((int)0x80000000) 
    } 
    public struct SHARE_INFO_502 
    { 
     public string Name; 
     public ShType Type; 
     public string Remark; 
     public int Permissions; 
     public int MaxUses; 
     public int CurrentUses; 
     public string Path; 
     public string PassWd; 
     public int reserved; 
     public IntPtr SecDescriptor; 
    } 

全て

[SuppressUnmanagedCodeSecurity] 
public static class SafeNativeMethods 

クラス内のVSコードアナライザに記載の方法。私はそれを呼び出す :上記のコード実行した後に、私はエラーまたは例外を受信しません

IntPtr ptrGet; 
var resGetInfo = SafeNativeMethods.NetShareGetInfo("server_name", "share_name", 502, out ptrGet);    
SafeNativeMethods.SHARE_INFO_502 siGet = (SafeNativeMethods.SHARE_INFO_502)Marshal.PtrToStructure(ptrGet, typeof(SafeNativeMethods.SHARE_INFO_502)); 

は、しかし、siGet構造体は、各プロパティの値の最初の文字だけを持っています。 どこに問題がありますか?

+0

はSHARE_INFO_502の宣言のためにこれを参照してください:http://www.pinvoke.net/default.aspx/Structures.SHARE_INFO_502 – PaulF

答えて

1

デフォルトの文字セットはAnsiであり、それは構造マーシャリングが使用するものです。しかし、あなたは関数のUnicodeバージョンを選択します。あなたは、文字列の最初の文字だけを見るたびに、あなたは最初にあなたがUTF-を持っていることを疑うべきで

  • [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 
    public struct SHARE_INFO_502 
    .... 
    

    いくつかのヒントテキストの整列化:あなたはまた、構造体の文字セットを指定する必要があります16テキストはANSIまたはUTF-8として解釈されます。

  • 英語が必要な中国語に見えるテキストが表示されている場合は、まずANSIまたはUTF-8テキストがUTF-16として解釈されていると思われます。
+0

は、この点を指摘いただきありがとうございます。実際、文字セットはありませんでした。私は間違って前にそれを削除する必要があります。私は自分で理解することができた - 愚かな私。すぐにお返事いただきありがとうございました。 –

関連する問題