Как получить серийный номер материнской платы от C#, который Inturn вызывает Delphi функцию? - PullRequest
0 голосов
/ 26 апреля 2020

Я использую приведенный ниже код для получения серийного номера материнской платы в Delphi

    function GetMotherBoardSerial(str: PWideChar; len: Integer): Integer; stdcall;
    var
      objWMIService : OLEVariant;
      colItems      : OLEVariant;
      colItem       : OLEVariant;
      oEnum         : IEnumvariant;
      iValue        : LongWord;
      s             : String;
      wc            : PWideChar;

      function GetWMIObject(const objectName: PWideChar): IDispatch;
      var
        chEaten: Integer;
        BindCtx: IBindCtx;
        Moniker: IMoniker;
      begin
        OleCheck(CreateBindCtx(0, bindCtx));
        OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
        OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
      end; 

    begin        
      objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
      colItems      := objWMIService.ExecQuery('SELECT SerialNumber FROM Win32_BaseBoard','WQL',0);
      oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
      if oEnum.Next(1, colItem, iValue) = 0 then
      s := VarToStr(colItem.SerialNumber);
      wc := PWideChar(s);
      StrLCopy(str, wc, len);
      Result := 1; 
    end;

Однако, когда я звоню с C#, как показано ниже, я получаю ошибку enter image description here

 [DllImport("Test.dll", EntryPoint = "GetMotherBoardSerial", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]
 public static extern int GetMotherBoardSerial(StringBuilder str, int len);

.....

StringBuilder str = new StringBuilder(256);
var result = GetMotherBoardSerial(str, str.Capacity);
MessageBox(str.ToString());

enter image description here

Может кто-нибудь, пожалуйста, помогите здесь, я борюсь с этим в течение последних 2 дней, и нет большой помощи в гугле Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...