当我手动加载主可执行程序集时,剪贴板不起作用
本文关键字:程序集 剪贴板 不起作用 可执行 加载 | 更新日期: 2023-09-27 18:18:38
我有一个c#项目,我从vc++项目中运行它。我在c#项目中使用了Clipboard
;但是当我从vc++运行我的c#项目时,它不能正常工作。
My c# code:
IDataObject dataObject = Clipboard.GetDataObject();
if (dataObject.GetDataPresent("MyType",true)) //This returns true in both of cases
Console.WriteLine("Here");
object obj = dataObject.GetData("MyType"); //obj is null
MyType data = obj as MyType;
// When I copy data from normal program to called program (from VC++) this is null
显然我不能在非STAThread
的项目中使用Clipboard
。我的c#项目的入口点是STAThread
,但我不知道如何使我的vc++项目STAThread
?
编辑:Application.OleRequired() == ApartmentState.STA
返回true
和我的线程是STAThread
。
只需在主[System::STAThread]
上添加
在这个项目中,我手工做一些事情,例如:
- 通过
Assembly.Load()
手动加载我的主可执行程序集。 - 通过处理
AppDomain.CurrentDomain.AssemblyResolve += (sender, e)
事件解析程序集。
加载主程序集后,它请求自己获取Assembly
对象。在这种情况下,加载主可执行程序集后,您应该存储Assembly
对象并在AssemblyResolve
方法中返回它。
这就是我的问题,难以置信!