请问比如我想调用如下的WinAPI
GetLogicalDriveStrings(DWORD nBufferLength,LPTSTR lpBuffer);
我看GetLogicalDriveStrings的解释,如果调用成功,会返回驱动器名称的若干个字符串,我在C#中进行如下调用:        [DllImport("Kernel32")]
        public static extern int GetLogicalDriveStrings(int nBufferLength, string lpBuffer);
        string str = "";
        MessageBox.Show(GetLogicalDriveStrings(125, str).ToString());
        MessageBox.Show(str);结果GetLogicalDriveStrings返回32,str = "",应该是调用有问题,请问有人知道正确的调用方法么?谢谢

解决方案 »

  1.   

    没有返回0,说明调用成功,试试out string lpBuffer
    或者参考
    http://www.pinvoke.net/search.aspx?search=GetLogicalDriveStrings&namespace=[All]// static extern uint GetLogicalDriveStrings(uint nBufferLength, 
    static extern uint GetLogicalDriveStrings(uint nBufferLength, [Out] char[] lpBuffer);
    static extern uint GetLogicalDriveStrings(uint nBufferLength, [Out] char[] lpBuffer);
        uint code = GetLogicalDriveStrings(size, buffer);
      

  2.   

    StringBuilder sb = new StringBuilder(256);//指定容量
    GetLogicalDriveStrings(sb.Capacity, sb);
    MessageBox.Show(sb.ToString());这是MSDN推荐的标准方法
      

  3.   

    $('#btn_complete').click(
    function() {
    if ($("#defaultConfigForm").validate().form()) {
    $('#btn_complete').attr( {
    "disabled" : "disabled"
    });
    blockUI();
    $.post('${ctx}/init/setConfig.do', $('#defaultConfigForm')
    .serializeArray(), function(data) {
    if (data == 'success') {
    window.location = "${ctx}/security/login.do";
    } else {
    unBlockUI();
    alert('系统初始化失败!');
    $('#btn_complete').removeAttr("disabled");
    }
    });
    }
    });