У меня есть COM-объект, который я пытаюсь обернуть в класс C#, чтобы сделать его более доступным для других приложений, которые хотят его использовать.
У меня есть следующий код, который создает экземпляр COM-объекта, а затем с помощью отражения вызывает метод для извлечения пользовательских данных. Этот код отлично работает, когда он находится на странице aspx.
object jdObj = Server.CreateObject("jd_api.UserCookie");
string username = jdObj.GetType().InvokeMember("GetUserName", System.Reflection.BindingFlags.InvokeMethod, null, jdObj , null).ToString();
Однако когда я перемещаю код в файл класса (JD_API.cs), чтобы абстрагировать его от фактического веб-сайта, я больше не могу заставить его работать. Например, у меня есть следующий статический метод, который объявлен так:
public static string GetUserName() {
object jdObj = Server.CreateObject("jd_api.UserCookie");
string username = jdObj.GetType().InvokeMember("GetUserName",
System.Reflection.BindingFlags.InvokeMethod, null, jdObj , null).ToString();
return username;
}
К сожалению, объект Server ограничен некоторыми библиотеками ASP.NET, которые по умолчанию включены в веб-приложения, поэтому приведенный выше код не годился. Итак, в этот момент я решил попытаться создать экземпляр COM-объекта следующим образом:
public static string GetUserName() {
Type type = Type.GetTypeFromProgID("jd_api.UserCookie");
object jdObj = Activator.CreateInstance(type);
string username = jdObj.GetType().InvokeMember("GetUserName", System.Reflection.BindingFlags.InvokeMethod, null, jdObj , null).ToString();
return username;
}
Однако во время выполнения я получаю сообщение об ошибке "Попытка чтения или записи в защищенную память. Часто это указывает на то, что другая память повреждена.".
Я не уверен, куда идти отсюда. Будем очень признательны за любую помощь в том, как абстрагировать создание экземпляра этого COM-объекта на уровень, который не находится в самом веб-приложении. Спасибо!!