РЕДАКТИРОВАТЬ : обновлено для отражения импорта макроса:
Вы не можете.
Теперь вы можете посмотреть, что делает макрос, и реализовать это с помощью P / Invoke. Приведенный ниже совет относится и к этому.
При работе с Platform Invoke (P / Invoke) лучше всего быть максимально явным:
internal static class NativeMethods
{
private static string DllName = @"api.dll";
// This uses 'string' assuming you do not have to free the memory.
[DllImport(DllName, EntryPoint = "errMessage",
CharSet = YourCharacterSet, // CharSet.Ansi? .Unicode?
CallingConvention = DllCallingConvention // .StdCall? .Cdecl?
)]
public static string errMessage(int errorCode);
}
Кроме того, лучше всего обеспечить управляемую точку входа, которая делает метод более ".Net". Здесь вы должны убедиться, что выделенная память вызывающей стороны удерживается в течение соответствующего времени (вам, возможно, придется реализовать SafeHandle ) или что обрабатывается другое ручное помахивание.
Предположим, errMessage
возвращает строку, которую мы не несем ответственности за освобождение:
public static class ManagedMethods
{
public static string ErrorMessage(ErrorCode errorCode)
{
return NativeMethods.errMessage((int)errorCode);
}
}