当我手动加载主可执行程序集时,剪贴板不起作用

本文关键字:程序集 剪贴板 不起作用 可执行 加载 | 更新日期: 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方法中返回它。

这就是我的问题,难以置信!