我不能讓它的工作投給一個類的對象... 我需要,因爲我動態加載一個Dll,並將它作爲方法的參數的類。這個類在兩個項目(同一個文件)中鏈接。C#對象類
我的班級我想給的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_;
}
}
DLL的調用:
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
您將'GetMethod'保存在一個名爲'miRun'的變量中,但是您正在'm_miRun'中檢查'null' - 是一個錯字嗎? – Default
我只是在發佈之前更改了代碼,並沒有改變這一點。我修正了它。 – ksklb