我想在clr 2.0中調用clr 4.0 contorl我有三個類。我的問題是第2課中的c.Add(x)。無法將com對象轉換爲控件
此行引發錯誤
Unable to cast object of type 'System.__ComObject' to type 'System.Windows.Forms.Control'.
堆棧跟蹤
at System.StubHelpers.InterfaceMarshaler.ConvertToManaged(IntPtr pUnk, IntPtr itfMT, IntPtr classMT, Int32 flags)
at Net4ToNet2Adapter.IClassAdapter.LoadRyderControl(Int32 atacode, Int32 eventid, Control c)
at Net2Assembly.RyderQuestion..ctor() in C:\Users\casmith\Desktop\C#\Net2Assembly\RyderQuestion.cs:line 28
at Net2Assembly.Program.Main() in C:\Users\casmith\Desktop\C#\Net2Assembly\Program.cs:line 17
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
在我看來,它不能訪問從對象的控制。
1類:網2 CLR
namespace Net2Assembly
{
public partial class RyQuestion : Form
{
private IClassAdapter _ryderControl;
public RyQuestion()
{
InitializeComponent();
var classAdapterType = Type.GetTypeFromProgID("Net4ToNet2Adapter.MyClassAdapter");
var classAdapterInstance = Activator.CreateInstance(classAdapterType);
var myClassAdapter = (IClassAdapter)classAdapterInstance;
_ryControl = myClassAdapter;
myClassAdapter.LoadRyControl(17, 291457,this.Panel1);
}
public void LoadQuestionsTC()
{
_ryControl.LoadQuestionsTC();
}
public void LoadQuestionsCloseout()
{
_ryControl.LoadQuestionsCloseout();
}
}
}
類2:我的CLR 4組件
namespace Net4Assembly
{
public class RyderControlWrapper
{
private WindowsFormsApplication3.RyCriticalPath _ryControl;
public void LoadRyControl(int atacode, int eventid,Control c)
{
WindowsFormsApplication3.RyderCriticalPath x = new WindowsFormsApplication3.RyCriticalPath(atacode, 2945784);
_ryControl = x;
c.Add(x); //Bad line :(
}
public void LoadQuestionsTC()
{
_ryControl.LoadQuestionsTC();
}
public void LoadQuestionsCloseout()
{
_ryControl.LoadQuestionsCloseout();
}
}
}
3類:淨4至淨2適配器
namespace Net4ToNet2Adapter
{
public class MyClassAdapter : IClassAdapter
{
private RyControlWrapper _rcWrapper = new RyControlWrapper();
public void LoadRyControl(int atacode, int eventid,Control c)
{
_rcWrapper.LoadRyControl(atacode, eventid,c);
}
public void LoadQuestionsTC()
{
_rcWrapper.LoadQuestionsTC();
}
public void LoadQuestionsCloseout()
{
_rcWrapper.LoadQuestionsCloseout();
}
}
}
namespace Net4ToNet2Adapter
{
[ComVisible(true)]
public interface IClassAdapter
{
void LoadRyderControl(int atacode, int eventid, Control c);
void LoadQuestionsTC();
void LoadQuestionsCloseout();
}
}
爲什麼選擇負面投票? – DidIReallyWriteThat 2015-02-20 15:08:46
你可以顯示「RyderCriticalPath」的代碼嗎? – 2015-02-20 15:33:35
WindowsFormsApplication3在哪裏 – Sxntk 2015-02-20 15:53:08