C#クラスでラップしようとしているCOMオブジェクトがあり、それを使用したい他のアプリケーションでより簡単に利用できるようにしています。
COMオブジェクトのインスタンスを作成する次のコードがあります。次に、リフレクションを使用して、ユーザーデータを取得するメソッドを呼び出します。このコードは、aspxページにある場合は正常に機能します。
object jdObj = Server.CreateObject("jd_api.UserCookie");
string username = jdObj.GetType().InvokeMember("GetUserName", System.Reflection.BindingFlags.InvokeMethod, null, jdObj , null).ToString();
ただし、実際のWebサイトからコードを抽象化するためにコードをクラスファイル(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アプリケーション自体の内部にないレイヤーに抽象化する方法についてのヘルプをいただければ幸いです。ありがとう!!