クラスにオブジェクトをキャストしようとすることができません... 私は動的にDllをロードし、メソッドのパラメータとしてクラスを与えるので、それが必要です。クラスは両方のプロジェクトでリンクされています(同じファイル)。C#オブジェクトからクラス
私がDLLに与えたいと思う私のクラス:DLLの
public class CParams
{
public int m_iFunctionCode = -1;
public STTestDll pTestDll;
public struct STTestDll
{
public int m_iSleepTime;
public int m_iCount;
}
public string GetDescriptionText()
{
return "Starte Dll: Sleeptime=" + pTestDll.m_iSleepTime.ToString() + "; Count=" + pTestDll.m_iCount.ToString() + "; Solldauer=" +
(pTestDll.m_iSleepTime * pTestDll.m_iCount/1000).ToString() + " Sekunden";
}
public CParams(int iFunctionCode_)
{
m_iFunctionCode = iFunctionCode_;
}
}
コール:クラスをキャストしようとし
Type typeDll = asmDLL.GetType(strClassName + "." + strClassName);
object activator = Activator.CreateInstance(typeDll);
MethodInfo miRun = typeDll.GetMethod("Run");
if (miRun != null)
{
CParams pParam = new CParams(0);
pParam.pTestDll.m_iCount = 200;
pParam.pTestDll.m_iSleepTime = 25;
object[] args = new object[1];
args[0] = pParam;
miRun.Invoke(activator, args);
}
コード:
public void Run(object objParams)
{
CParams pParams = (CParams)objParams;
MessageBox.Show(pParams.pTestDll.m_iCount.ToString() + " - " + pParams.pTestDll.m_iSleepTime.ToString());
}
エラーはInvalidCastExceptionです。
どちらのメソッドも最終的な型を知っているようですが、なぜメソッドの呼び出しとキャストに頼っていますか?これはむしろ、インターフェイスを介した抽象化があなたにとってもっと助けになる場所のようです。 – Icepickle
'miRun'という変数に' GetMethod'を保存していますが、 'm_miRun'を' null'としてチェックしています - それは打ち間違いですか? – Default
投稿する前にコードを変更しましたが、それを変更しませんでした。私はそれを修正した。 – ksklb