Привет всем!
Прошу прощения, если мой вопрос уже обсуждался в форуме.
Имеется простая задача вызова функции COM.
На VB экспорт описания функции и код выглядит так:
Private Declare Function mciGetErrorString Lib "winmm" Alias "mciGetErrorStringA" (ByVal dwError As Long, ByVal lpstrBuffer As String, ByVal uLength As Long) As Long
Dim ErrorString As String
ErrorString = Space$(256)
mciGetErrorString 256, ErrorString, Len(ErrorString)
// В переменной ErrorString содержится описание ошибки
Переписываю на C#
[DllImport("winmm.dll")]
public static extern Int32 mciGetErrorString (Int32 dwError, String lpstrBuffer, Int32 uLength);
Вызываю:
1 способ:
String ErrorString = new String(' ',256);
mciGetErrorString (263, ErrorString, ErrorString.Length);
// ErrorString не изменяется
2 способ:
String ErrorString = new String(' ',256);
IntPtr p = Marshal.StringToHGlobalAnsi(ErrorString);
mciGetErrorString (RetVal, Marshal.PtrToStringAnsi(p), ErrorString.Length);
ErrorString = Marshal.PtrToStringAnsi(p);
// ErrorString не изменяется
Вопрос, как правильно вызвать функцию и получить описание ошибки.
Всем большое спасибо за ответ!
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Yustas, Вы писали:
Y>>Имеется простая задача вызова функции COM.
А>посмотри описание класса StringBuilder
А>PS а причем здесь COM ?
Да, действительно, что то мысль про неизменность String в голову не пришла.
Спасибо