因此,我正在处理的程序从用户输入文本编辑器(使用 CodeDOM 作为编译器)的源代码创建一个动态的 .Net 程序集。我需要为这个程序集获取一个包含所有用户定义方法的 IDispatch。
例如,用户可以输入:
Imports System.Windows.Forms
Public Class Test
Function Hello
MessageBox.Show("Hello, World!")
End Function
End Class
这将创建一个我可以引用的内存中程序集。我用来获取 IDispatch 的代码:
//"file" the pointer to the in-memory assembly, "name" is the name of the type being created
HRESULT ScriptEngine::GetDispatch(void** disp) {
Object^ component = file->CreateInstance(name);
if (file != nullptr) {
*disp = Marshal::GetIDispatchForObject(component).ToPointer();
return S_OK;
else
return E_FAIL;
}
这成功地为我获取了 IDispatch,但它不包含任何用户定义的方法。相反,它只包含六个默认的 IDispatch 方法(QueryInterface、GetTypeInfo 等)。我需要能够获得已定义的方法,例如上一个示例中的“Hello”。
如何从该程序集中获取包含用户定义方法的 IDispatch?