我有一个 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 对象仅限于一些默认包含在 Web 应用程序中的 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 对象的实例抽象到不在 Web 应用程序本身内的层的任何帮助将不胜感激。谢谢!!