Я использую приведенный ниже код для получения серийного номера материнской платы в 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#, как показано ниже, я получаю ошибку
[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());
Может кто-нибудь, пожалуйста, помогите здесь, я борюсь с этим в течение последних 2 дней, и нет большой помощи в гугле Заранее спасибо