У меня есть 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-объекта в слой, который не находится внутри самого веб-приложения, будет принята с благодарностью.Спасибо !!